[pandas] Dataframe data processing, cleaning

aretelma·2022년 5월 27일
0
post-thumbnail

Dataframe 에서 data를 사용하려고 할때(model을 만든다거나, visualize하여 insight를 얻고자 할 때) missing value를 처리할 필요가 있다.


isnull()

pandas.isnull(obj)

isnull() 함수로 스칼라, array-like 그러니까 유사배열 오브젝트의 null 또는 missing value를 확인할 수 있다.
True, False로 이루어진 입력과 동일한 형태의 오브젝트가 반환된다.

DataFrame.isna() DataFrame.isnull() pandas.isna() 모두 같은 결과가 나와서 뭘 사용해도 된다.
Dataframe에서 특정 인덱스에 대해서만 확인도 가능하다.

df = pd.DataFrame([['ant', 'bee', 'cat'], ['dog', None, 'fly']])
df
     0     1    2
0  ant   bee  cat
1  dog  None  fly

pd.isna(df)
       0      1      2
0  False  False  False
1  False   True  False

#pd.isna(df[1])
df[1].isnull()

0    False
1     True
Name: 1, dtype: bool

missing value를 찾았으면 이제 처리해줘야 한다.
missing value를 처리하는 방법은 missing value가 있는 data를 아예 고려하지 않는, 삭제하는 방법과 missing value에 적절한 값을 채우는 방법이 있다.
어떻게 할지는 data에 따라서 적절히 선택할 것.


dropna()

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

dropna() 로 missing value가 존재하는 행이나 열을 삭제할 수 있다.
axis가 0이면 행을 1이면 열을 제거한다.
how가 'any'이면 하나라도 missing value가 존재하면 제거하고 'all' 이면 모두여야 제거한다.
inplace가 False이면 drop된 후의 dataframe을 리턴하고, True일때는 기존의 dataframe에서 제거가 이루어지며 따로 dataframe을 리턴하지 않는다.
(제거한 결과 dataframe을 따로 저장해줄 필요가 없다.)

df = pd.DataFrame([[1, 2, 3, 0],
                   [3, 4, 2, 1],
                   [np.nan, np.nan, np.nan, np.nan],
                   [np.nan, 3, np.nan, 4]],
                  columns=list("ABCD"))

df
	A	B	C	D
0	1.0	2.0	3.0	0.0
1	3.0	4.0	2.0	1.0
2	NaN	2.0	NaN	NaN
3	NaN	3.0	NaN	4.0

df.dropna()
	A	B	C	D
0	1.0	2.0	3.0	0.0
1	3.0	4.0	2.0	1.0

df[['A','B']].dropna()
	A	B
0	1.0	2.0
1	3.0	4.0

df.loc[3].dropna()
B    3.0
D    4.0
Name: 3, dtype: float64

loc, iloc, column name 여러 기준을 이용해 사용 가능하다.


fillna()

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

fillna() 로 missing value에 적절한 값을 채워줄 수 있다.
value의 값으로 missing value가 채워지며, value에는 스칼라, dictionary, Series, Dataframe이 모두 가능하다.

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, np.nan],
                   [np.nan, 3, np.nan, 4]],
                  columns=list("ABCD"))
df
     A    B   C    D
0  NaN  2.0 NaN  0.0
1  3.0  4.0 NaN  1.0
2  NaN  NaN NaN  NaN
3  NaN  3.0 NaN  4.0

values = {"A": 0, "B": 1, "C": 2, "D": 3}
df.fillna(value=values)
     A    B    C    D
0  0.0  2.0  2.0  0.0
1  3.0  4.0  2.0  1.0
2  0.0  1.0  2.0  3.0
3  0.0  3.0  2.0  4.0

특정 열이나 행에 채워줄 value를 각각 설정할 수도 있다.


참고자료

pandas.isnull
pandas.DataFrame.dropna
pandas.DataFrame.fillna

profile
졸업하기 싫어요

0개의 댓글