garret

[Python] pandas.DataFrame.dropna() 함수 본문

Programming/Python

[Python] pandas.DataFrame.dropna() 함수

_Sun_ 2023. 6. 21. 18:58

DataFrame 함수 전처리할 때 종종 사용하는 dropna(). 

보통 axis 파라미터만 사용했는데, 다양한 옵션들이 있어서 알면 유용할 거 같아 정리. 

 

 

dropna 함수 정의


DataFrame.dropna(*, axis=0, how=_NoDefault.no_default,
thresh=_NoDefault.no_default, subset=None, inplace=False,ignore_index=False)

결측값을 삭제하는 함수

 

 

 

 

파라미터 구성


axis : drop할 row나 column 선택, single axis만 가능. 디폴트 0

  • 0 , 'index' : 결측값 있으면 row drop
  • 1, 'columns' : 결측값 있으면 column drop

how : 하나의 결측값만 있어도 drop할지, 전부 결측값일 때 drop할지 결정. 디폴트 'any'

  • 'any' : 하나의 결측값만 있어도 해당 row 나 column drop
  • 'all' : 모든 value가 결측값일 때, 해당 row나 column drop

thresh : drop하지 않을 최소 비결측값 개수 설정. how와 같이 쓸 수 없다.

 

subset : drop하려는 column 라벨, 또는 라벨의 시퀀스 설정. (optional)

 

inplace : DataFrame을 수정할지, 새로운 DataFrame을 만들지 결정. 디폴트 False

 

ignore_index : True라면, 결과 axis는 0,1,...,n-1로 라벨링. 디폴트 False

 

 

 

예시


>>> df = pd.DataFrame({"name": ['pubao', 'ibao', 'lebao'],
...                    "toy": [np.nan, 'bamboo', 'ball'],
...                    "born": [pd.NaT, pd.Timestamp("2010-04-25"),
...                             pd.NaT]})
>>> df
       name        toy       born
0     pubao        NaN        NaT
1      ibao     bamboo 2010-04-25
2     lebao       ball        NaT

 

옵션 지정안했을 경우

디폴트값 axis=0, how=any 로 설정되어 결측값이 있는 모든 row drop. 

>>> df.dropna()
     name        toy       born
1    ibao     bamboo  2010-04-25

 

axis = 'columns' 또는 axis = 1 지정시, 결측값이 있는 column 모두 drop 

>>> df.dropna(axis='columns')
       name
0     pubao
1      ibao
2     lebao

 

how = 'all' 일 때, row의 모든 값이 결측값인 경우에만 drop

>>> df.dropna(how='all')
       name        toy       born
0     pubao        NaN        NaT
1      ibao     bamboo 2010-04-25
2     lebao       ball        NaT

 

thresh = 2 ; row의 비결측값이 2개이상인 것만 남기고 나머지 drop

>>> df.dropna(thresh=2)
       name        toy       born
1      ibao     bamboo 2010-04-25
2     lebao       ball        NaT

 

'name' 컬럼과 'toy' 컬럼에서 결측값이 있는 경우 drop

>>> df.dropna(subset=['name', 'toy'])
       name        toy       born
1      ibao     bamboo 2010-04-25
2     lebao       ball        NaT

 

 

 

 

Reference

 

pandas.DataFrame.dropna — pandas 2.0.2 documentation

next pandas.DataFrame.duplicated

pandas.pydata.org