어제 밤에 아파트 거래 데이터의 x, y 좌표(위도, 경도) 결측치를 모두 채워주는 작업을 했었는데, 오늘 계속 전처리하려고 보니 shape이 달라져 있었다. 아래는 문제를 해결했던 과정.
원래 데이터셋은 학습용과 테스트용으로 나뉜채 주어졌다. 이 두 개의 데이터셋을 합친 다음에, 둘을 구분해주기 위해 ['is_test']라는 컬럼을 추가한 뒤에 concat이라는 이름으로 다시 데이터프레임을 저장했다.
concat.shape은 (1128094, 53)이고, 이 상태에서 x, y 좌표 결측치를 채우고 확인해보니 (1141120, 40)가 되어 있던 것!
주소와 x, y 좌표를 매치시켜놓은 데이터셋('xy'라는 데이터셋으로 데이터프레임을 저장함)과 머징하는 과정에서 뭔가 문제가 생겼다. 주소와 x, y 좌표를 매치시켜놓은 데이터셋은 부트캠프의 다른 능력자님들이 공유해주신 csv 파일을 다운받았다(크롤링하는 방법도 있다는데, 할 게 많아서 일단 크롤링까지는 못하겠고 쉬운 길로.)
중복된 주소를 찾아보니, 같은 주소에 x, y가 각기 다르게 들어간 것들이 다수 발견됐다. 이것 때문에 행이 늘어난 것이구나!
솔직히 주소를 하나하나 찾아가며 위도 경도를 확인하면 베스트이겠지만, 딱히 방법이 떠오르지 않는다. 그냥 하나만 남기고 모두 지우는걸로.. 클로드에게 물어보니, 아래 함수를 쓰면 된다고.
#주소의 첫 번째로 나타난 행만 유지되고 나머지 중복된 행은 제거
xy_unique = xy.drop_duplicates(subset='주소')
#다시 merge!
merge_3 = pd.merge(concat, xy_unique, on='주소', how="left")
merge_3.shape
#결과: (1128094, 58)
됐다!
+추가 예시
import pandas as pd
# 샘플 데이터
xy = pd.DataFrame({
'주소': ['A', 'B', 'A', 'C', 'B'],
'값1': [1, 2, 3, 4, 5],
'값2': ['x', 'y', 'z', 'w', 'v']
})
print("원본 데이터:")
print(xy)
xy_unique = xy.drop_duplicates(subset='주소')
print("\n중복 제거 후:")
print(xy_unique)
원본 데이터:
주소 값1 값2
0 A 1 x
1 B 2 y
2 A 3 z
3 C 4 w
4 B 5 v
중복 제거 후:
주소 값1 값2
0 A 1 x
1 B 2 y
3 C 4 w
'공부방 > Upstage AI Lab 4기' 카테고리의 다른 글
[FastAPI] FastAPI 기본 사용법, 프로젝트 세팅하기 (1) | 2024.09.26 |
---|---|
가상환경 깔고나서 가상환경이 있던 폴더 이름 바꾸지 말자!!! (0) | 2024.09.25 |
위도와 경도를 기준으로 주변에 있는 공원 개수 구해주기 (0) | 2024.09.25 |
학습일지 | MLOps에 대한 대략적인 소개 (0) | 2024.09.23 |
경진대회 Fast-Up Report (1) | 2024.09.20 |