본문 바로가기

공부방/Upstage AI Lab 4기

판다스 | 조건에 따라 데이터 삭제, 중복 데이터 삭제

원하는 조건에 맞춰서 데이터를 삭제해보자.

일단 원본 데이터를 카피해서 df로 저장하고 describe를 해서 어떤 조건을 줄지 확인했다. 

층에 min 값이 -4가 찍혀 있다! 지하 4층...?

#0층 이하인 아파트 거래 개수
df[df['층']<0]
#259 rows × 43 columns 개나 나온다

-1층까지는 반지하(?)느낌으로 말이 되는 것 같은데, -2층부터는 뭔가 이상하다. 

df[df['층']<-2]

로 찍힌 아파트명을 보니 모두 같은 아파트였고, 네이버 부동산으로 확인해봤는데 2층부터 시작이다. 확실히 지하는 없는 걸로. 잘못 쓴 것 같다. 

만약 이 값을 지우고 싶다면? 

df = df[df['층']<-2]

-2를 2로 변경하고 싶다면?

'''
df['층'] == -2으로 '층' 열의 값이 -2인 모든 행을 선택
loc[]를 사용하여 선택된 행의 '층' 열 값을 2로 변경
대규모 데이터셋에서 효율적
'''
df.loc[df['층'] == -2, '층'] = 2

'''
replace 메서드를 사용하는 법
전체 열을 순회하면서 지정된 값을 찾아 바꾼다.
여러 값을 바꾸기 쉽다.
'''
df['층'] = df['층'].replace({-2: 2})
df['층'] = df['층'].replace({-2: 2, -3: 3, -4: 4})

 

중복 데이터 찾아서 삭제하기

pd.Series(df.duplicated()).value_counts()

'''
False    1104668
True          50
dtype: int64
'''

#중복데이터 확인하기
df[df.duplicated(keep=False)].sort_values(by=list(df.columns)).head(10)

#중복데이터를 맨 처음 나오는 것만 남기고 삭제
df = df.drop_duplicates(keep='first')

#결과
pd.Series(df.duplicated()).value_counts()

'''
False    1104668
dtype: int64
'''