이 글은 Pandas에서 데이터 전처리 하는 방법을 공부하고 정리한 글 입니다.
w3school의 해당 강의를 참고하며 공부했습니다.
우리의 데이터가 항상 깔끔했으면 좋겠지만 아닌 경우가 너무 많다.
다음과 같은 경우가 있다.
이런 경우에 데이터 분석에 영향을 없애기 위해서 처리를 해줘야 한다.
데이터의 셀이 비어있는 경우
해당 데이터의 행을 지워버리거나 비어있는 셀을 특정 값으로 채워 넣을 수 있다.
new_df = df.dropna()
dropna() 함수를 사용하면 비어있는 셀이 있는 모든 행을 삭제한다.
데이터의 양이 많거나 삭제하는 행이 적을때는 문제가 되지 않지만
데이터 양 자체가 적거나 너무 많은 행을 삭제할때는
다른 방법을 사용하는게 좋다.
newdf = df.fillna(100)
fillna() 함수를 사용하면 인자로 들어온 값으로 비어있는 셀 전체를 채운다.
newdf = df["Calories"].fillna(100)
df["Calories"] = newdf
df.head(100)
fillna() 함수는 시리즈에도 적용해서 특성 열만 전처리가 가능하다.
평균값 = df["Calories"].mean()
중앙값 = df["Calories"].median()
최빈값 = df["Calories"].mode()
print(평균값, 중앙값, 최빈값)
채워넣는 값은 임의의 값이 아니라 보통 평균값, 중앙값, 최빈값을 사용한다.
각각의 값은 mean()
, median()
, mode()
함수를 사용해서 구해준다.
데이터의 값이 너무 크거나 작은 경우 수동으로 전처르 해줄 수 있다.
df.loc[7, "Duration"] = 1
해당 코드는 7번 행의 "Duration"열의 값을 1로 수정하는 코드다.
이때 수정하는 값은 평균값, 중앙값, 최빈값 등을 사용 할 수 있다.
mean_value = df["Duration"].mean()
for index in df.index:
if df.loc[index, "Duration"] > 100:
df.loc[index, "Duration"] = mean_value
너무 많은 값을 수동으로 전처리 해주기는 힘들기 때문에
for 문을 사용해서 자동으로 평균값으로 입력 해줄 수 있다.
for index in df.index:
if df.loc[index, "Duration"] > 100:
df.drop(index, inplace=True)
혹은 기준에 넘는 행을 삭제 할 수 있다.
df.duplicated()
df.duplicated() 함수를 사용하면 중복된 행이 있는지 탐색하고
결과를 각각의 bool값을 가진 시리즈를 반환한다.
new_df = df.drop_duplicates()
df.drop_duplicates() 함수를 사용하면 중복된 행들은 삭제한 결과를 반환한다.