In [1]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))
In [2]:
import pandas as pd
import numpy as np
In [3]:
# 데이터프레임 생성
df = pd.DataFrame(
{'a' : [4, 5, 6],
'b' : [7, 8, 9],
'c' : [6, 9, 12]},
index = pd.MultiIndex.from_tuples( [('d', 1), ('d', 2), ('e', 2)] ,
names = ['n', 'v'] )
)
df
Out[3]:
True/False (불린인덱싱)을 이용한 행 데이터 조회¶
In [4]:
# 기본적으로 <, >, = 와 같은 연산자를 이용하면 아래와 같이 불린 값이 반환된다.
df['a'] < 6
Out[4]:
In [5]:
# True로 값을 반환한 행에 대해서만 데이터를 불러온다.
df[df['a'] < 6]
Out[5]:
중복데이터 제거 : df.drop_duplicates( )¶
In [6]:
# 중복된 행을 가지는 임의의 데이터프레임 생성
df = pd.DataFrame(
{'a' : [4, 5, 6, 6 ],
'b' : [7, 8, 9, 9],
'c' : [6, 9, 12, 12]},
index = pd.MultiIndex.from_tuples(
[('d', 1), ('d',2), ('e', 2), ('e', 3)],
names = ['n', 'v'] )
)
df
Out[6]:
In [7]:
# drop_duplicates을 수행하면 중복된 행을 제거해준다
df.drop_duplicates()
Out[7]:
In [8]:
# 하지만 위의 코드를 실행 후 다시 데이터프레임을 불러오면 중복된 값이 그대로 살아있다.
df
Out[8]:
In [9]:
# 결과를 데이터프레임에 적용하려면 아래와 같이 괄호 안에 inplace = True 추가하면 된다.
# df.drop_duplicates(inplace=True)
# 하지만 권장되는 방법은 아니며 주로 아래와 같이 기존 데이터 프레임에 덧씌우는 방식을 사용
df = df.drop_duplicates()
In [10]:
# 중복데이터가 제거된체 데이터프레임이 저장되었음을 확인할 수 있다.
df
Out[10]:
Logic in 파이썬(판다스)¶
연산자 | 의미 | 연산자 | 의미 |
---|---|---|---|
< | Less than | != | Not equal to |
> | Greater than | df['column명'].isin(values) | value값을 포함하는지의 여부 |
== | equal | pd.isnull(obj) | Null값 여부 |
<= | Less than or equals | pd.notnull(obj) | Not Null 여부 |
>= | Greater than or equals | &, I , ~, ^, any( ) , df.all( ) | and, or, not, xor, any, all |
In [11]:
# 예시데이터 불러오기
import numpy as np
df = pd.DataFrame(
{'a' : [4, 5, 6, 6, np.nan ],
'b' : [7, 8, 9, 9, np.nan],
'c' : [6, 9, 12, np.nan, 12]},
index = pd.MultiIndex.from_tuples(
[('d', 1), ('d',2), ('e', 2), ('e', 3), ('e', 4)],
names = ['n', 'v'] )
)
df
Out[11]:
예시를 이용해서 로직 하나씩 실행해보기
In [12]:
df['a'] < 5
Out[12]:
In [13]:
df['b'] != 7
Out[13]:
In [14]:
df['a'] == 5
Out[14]:
In [15]:
df['a'].isin([5])
Out[15]:
In [16]:
pd.isnull(df)
Out[16]:
In [17]:
# isnull() 과 sum() 을 같이 활용해서 null 값의 수를 셀 수 있다.
df['a'].isnull().sum()
Out[17]:
In [18]:
pd.notnull(df)
Out[18]:
In [19]:
# isnull() 과 any()를 동시에 사용해서 null 값이 하나라도 있으면 True를 반환
df.isnull().any()
Out[19]:
In [20]:
# isnull() 과 all()를 동시에 사용해서 모두 null 값이면 True를 반환
df.isnull().all()
Out[20]:
In [21]:
# ~ 는 not 의 의미로 아래에서는 결국 Null이면 True를 반환
~df['a'].notnull()
Out[21]:
In [22]:
# 데이터프레임에서는 and를 쓸 수 없고 & 를 사용해야함
df[(df['b']==7) and (df['a'] ==4) ]
In [23]:
df[ (df['b']==7) & (df['a'] ==4) ]
Out[23]:
데이터프레임의 일부샘플 조회하기¶
df.head( ) 와 df.tail( ) 을 이용한 조회¶
In [24]:
# 최초 n행 조회하기 (default는 5행)
df.head(2)
Out[24]:
In [25]:
# 마지막 n행 조회하기 (default는 5행)
df.tail(2)
Out[25]:
df.sample( ) 을 이용한 샘플 추출¶
In [26]:
# 전체 데이터프레임에서 특정 비율만큼 샘플링하는 것
df.sample(frac=0.5)
Out[26]:
In [27]:
# 하지만 코드를 실행할 때마다 다른 샘플이 나옴
df.sample(frac=0.5)
Out[27]:
In [28]:
# 아래와 같이 난수값을 설정함으로써 일관된 샘플을 할 수 있다.
df.sample(frac=0.5, random_state=5)
Out[28]:
In [29]:
# 샘플 갯수 설정
df.sample(n=3)
Out[29]:
df.iloc[ ]와 콜론(:)을 이용한 데이터프레임 조회¶
In [30]:
# df.iloc[인덱스 시작: 인덱스 끝]
# iloc로 조회를 할 떄 인덱스 끝의 바로 앞 데이터까지만 조회가 된다.
df.iloc[2:4]
Out[30]:
In [31]:
# 콜론 앞에 아무것도 입력하지 않으면 첫 데이터부터 조회
df.iloc[:4]
Out[31]:
In [32]:
# 음수값을 입력하면 뒤에서 몇번째인지를 나타냄
# 아래 코드는 뒤에서 두번째 행부터 끝까지 조회
df.iloc[-2:]
Out[32]:
In [33]:
# df.iloc
df.iloc[2:4, 1:]
Out[33]:
df.nlargest( ) 과 df.nsmallest( )¶
In [34]:
# 샘플 데이터프레임 생성
df = pd.DataFrame( { 'a' : [1, 10, 8, 11, -1],
'b' : list('abcde'),
'c' : [1.0, 2.0, np.nan, 3.0, 4.0]} )
df
Out[34]:
In [35]:
# 가장 큰 a 값을 가진 행 조회
df.nlargest(1, 'a')
Out[35]:
In [36]:
# a 값이 큰 순서대로 상위 3개 행 조회
df.nlargest(3, 'a')
Out[36]:
In [37]:
# 문자열에는 사용할 수 없음
df.nlargest(2, 'b')
In [38]:
# a 값이 작은 순서대로 상위 3개 행 조회
df.nsmallest(3, 'a')
Out[38]:
'Python > Pandas Cheat Sheet' 카테고리의 다른 글
5. Handling Missing Data(결측치 다루기) (0) | 2019.10.16 |
---|---|
4. Summarize Data(자료 요약하기) (0) | 2019.10.16 |
3. Subset Observations(Columns) (열 데이터 다루기) (0) | 2019.10.09 |
1. Creating DataFrame(데이터프레임 만들기) (0) | 2019.10.09 |