pandas_Subset_Observations_(Rows)

import pandas as pd
import numpy as np
df = pd.DataFrame(
        {"a" : [4 ,5, 6, 6, np.nan],
        "b" : [7, 8, np.nan, 9, 9],
        "c" : [10, 11, 12, np.nan, 12]},
        index = pd.MultiIndex.from_tuples(
        [('d',1),('d',2),('e',2),('e',3),('e',4)],
        names=['n','v']))
df
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0

Subset Observations (Rows)

컬럼명에서 원하는 행 가져오기

df[df['a'] <= 5]
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
df[df['c'] >= 7]

a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
4 NaN 9.0 12.0
df
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df = df.drop_duplicates(keep='last') #중복된 행 제거해줌
df
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df.head()

a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df[df["b"] != 7] #7과 같지 않는 것만 가져온다
a b c
n v
d 2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df['a'].isin([5]) #isin은 리스트 형태로 들어가야한다
n  v
d  1    False
   2     True
e  2    False
   3    False
   4    False
Name: a, dtype: bool
df.a.isin?
pd.isnull(df) #null 값 확인
a b c
n v
d 1 False False False
2 False False False
e 2 False True False
3 False False True
4 True False False
df['a'].isnull().sum()
1
pd.notnull(df) #널값 아닌 값 확인
a b c
n v
d 1 True True True
2 True True True
e 2 True False True
3 True True False
4 False True True
df.notnull().sum()
a    4
b    4
c    4
dtype: int64
df.a.notnull()
n  v
d  1     True
   2     True
e  2     True
   3     True
   4    False
Name: a, dtype: bool

Logic in Python (and pandas)

  • &, ,~,^,df.any(),df.all()
  • and, or, not, xor, any, all
df
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df[(df.b == 8) & (df.a == 5)]
a b c
n v
d 2 5.0 8.0 11.0
df.sample(n=1) #특정 개수만큼 랜덤하게 샘플링 해옴
a b c
n v
e 3 6.0 9.0 NaN
df
a b c
n v
d 1 4.0 7.0 10.0
2 5.0 8.0 11.0
e 2 6.0 NaN 12.0
3 6.0 9.0 NaN
4 NaN 9.0 12.0
df.iloc[-2:]

a b c
n v
e 3 6.0 9.0 NaN
4 NaN 9.0 12.0
df = pd.DataFrame({'a':[1,10,8,11,-1],
                  'b': list('abdce'),
                  'c' : [1.0,2.0,np.nan,3.0,4.0]})
df
a b c
0 1 a 1.0
1 10 b 2.0
2 8 d NaN
3 11 c 3.0
4 -1 e 4.0
df.nlargest(1,'a')
a b c
3 11 c 3.0
df.nsmallest(3,'a')
a b c
4 -1 e 4.0
0 1 a 1.0
2 8 d NaN