-
Pandas 판다스 DataFrame 원하는 데이터 특정 셀 추출, 변경(수정)▶파공's 취미 생활/▷파이썬 공부 2022. 8. 28. 22:48
안녕하세요
파이어(F.I.R.E.)를 꿈꾸는 공룡
'파공' 입니다.
오늘은 Pandas 판다스 DataFrame 데이터프레임에서 특정 셀에 있는 원하는 데이터를 추출해보고 변경(수정)해보는 방법을 말씀드려보고자 합니다.
결측값(null, nan) 처리할 때도 유용하게 사용할 수 있는 방법이니 참고해보시면 좋을 것 같습니다!
오늘 실습(?)에 사용할 데이터는 간단히 임의로 만든 것이 아니고, 공공데이터 포털에서 실제 데이터를 준비해봤습니다. ‘2020년 서울특별시 부동산 실거래가 정보’ 입니다.
상당히 예전에 받아놨던 데이터라서 벌써 재작년 통계가 되어버렸네요.^^;
그래도 재밌게 볼 수 있는 데이터셋이 아닐까 생각해서 사용해봤습니다!
데이터는 첨부파일로 올려놨으니, 다운받으셔서 사용하시면 됩니다.
준비과정부터 시작해보겠습니다. 바로 코드가 궁금하신분들은 아래로 내려서 < 본론 > 부터 보시면 됩니다.
< 준비 과정 >
1. 첨부파일 데이터 다운로드 저장
해당 포스팅의 첨부파일(“서울특별시_부동산_실거래가_정보_2020년.csv”)을 주피터 노트북 파일을 생성할 폴더에 ‘data’ 폴더를 만들어서 그곳에 저장해주세요.2. 데이터 csv 파일 호출 및 데이터 살펴보기
Pandas 라이브러리를 import 하고, 실습에 사용할 csv 데이터를 호출합니다.
(판다스로 다양한 폴더 경로에있는 csv 혹은 엑셀xlsx 파일을 호출하기 불러오기 방법은 아래 글을 참고해주세요!)
2021.07.20 - [▶파공's 취미 생활/▷파이썬 공부] - Pandas DataFrame csv파일 엑셀파일 불러오기 읽기, utf-8 에러 해결법
불러온 csv 파일을 저장한 데이터프레임이 어떻게 구성되어있는지 간단히 살펴봅니다.
< 실행 화면 >
< 코드 >
1234567import warningswarnings.filterwarnings("ignore")import pandas as pdseoul_2020 = pd.read_csv('data/서울특별시_부동산_실거래가_정보_2020년.csv',encoding='cp949')seoul_2020.info()cs 한글이 포함된 csv 파일을 읽어올 때는 encoding='cp949' 를 추가해야 된다는 점 주의해주세요!
데이터가 17만6001건이나 있네요. 컬럼들(특성들)도 생각보다 구체적으로 구성되어있습니다.
이제 실제 데이터를 몇개 호출해서 살펴보도록 하겠습니다.
< 실행 화면 >
< 코드 >
1seoul_2020.head(5) # 최상단 5개 데이터만 불러와서 데이터 확인해보기cs 대충 어떤 구성이구나 살펴보면서 데이터에 익숙해지는 단계라고 생각하시면 됩니다.
호출한 데이터를 보시면 하나의 셀에 글자가 많이 들어가 있는 컬럼들(실거래가아이디, 건물명 등)이 눈에 보이네요.
실습할 때 이런 컬럼들이 있으면 모양이 안이쁘게 나오니 실습할 때는 이런 컬럼들은 빼고 하겠습니다.
3. 실습에 사용할 컬럼들만 추출 및 추가 정리
제 임의대로 보고싶은 컬럼들(특성들)만 골라서 sample 데이터프레임을 구성했습니다.
상위 10개 행만 살펴보겠습니다.
< 실행 화면>
< 코드 >
12345678sample = seoul_2020[['자치구명','법정동명','층정보','건물주용도','물건금액','건축년도']]#제 임의대로 보고싶은 컬럼들(특성들)만 골랐습니다.print(sample.head(10))#물건금액을 억단위로 바꿈sample['물건금액'] = sample['물건금액']/100000000samplecs 원본 때 보다 훨씬 깔끔하고 보기 좋네요.
컬럼들만 선택적으로 추출한거지 행은 건드리지 않았기 때문에, 데이터수는 여전히 176,001개로 상당히 많습니다.
그런데 ‘물건금액‘ 컬럼에 숫자가 너무 커서, 전체를 1억으로 나누어 주었습니다.
이제 ‘물건금액’은 억단위 표기라고 보면 되고 좀 더 깔끔해졌네요.
이제부터, 본론 입니다!
< 본론 >
1. ‘.loc’ 를 사용하여 원하는 데이터 특정 셀 추출 및 값 변경 (결측값 처리)
.loc 메서드를 사용해서 진행해보겠습니다.
실행화면에 설명도 같이 적어두었으니 천천히 보시면 좋을 것 같습니다.
.loc 매서드를 사용하는 방법에도 두 가지가 있다는 것에 주의해서 읽어주세요!
추천드리는 방법은 두번째 방법입니다!
< 실행 화면>
< 코드 >
1234567891011121314151617181920#강남구, 단독주택, 2017년포함 이후에 지어진 부동산의 거래 데이터만 추출해보겠습니다.#.loc를 사용하는 방법에 두가지가 있음
#첫번째 방법sample.loc[sample['자치구명'] == '강남구'].loc[sample['건물주용도']=='단독주택'].loc[sample['건축년도']>=2017]#두번째 방법sample.loc[(sample['자치구명'] == '강남구') & (sample['건물주용도']=='단독주택') & (sample['건축년도']>=2017)]#첫번째 방법sample.loc[sample['자치구명'] == '강남구'].loc[sample['건물주용도']=='단독주택'].loc[sample['건축년도']>=2017]['층정보']#두번째 방법sample.loc[(sample['자치구명'] == '강남구') & (sample['건물주용도']=='단독주택') & (sample['건축년도']>=2017), '층정보']#첫번째 방법으로 수정하고 확인sample.loc[sample['자치구명'] == '강남구'].loc[sample['건물주용도']=='단독주택'].loc[sample['건축년도']>=2017]['층정보'] = 1sample.loc[sample['자치구명'] == '강남구'].loc[sample['건물주용도']=='단독주택'].loc[sample['건축년도']>=2017]['층정보']#두번째 방법으로 수정하고 확인sample.loc[(sample['자치구명'] == '강남구') & (sample['건물주용도']=='단독주택') & (sample['건축년도']>=2017), '층정보'] = 1sample.loc[(sample['자치구명'] == '강남구') & (sample['건물주용도']=='단독주택') & (sample['건축년도']>=2017), '층정보']cs 실행 화면을 중점적으로 잘 보셨나요?
코드는 필요하신 부분들을 복사해가셔서 쓰시면 됩니다.
중요한 것은 .loc 매서드를 사용하는 방법 중 두번째 방법을 사용해야 한다는 것입니다.
특정 셀의 값, 특히 결측값을 추출하고나서 수정안하고 지나가는 경우는 많이 않으니까요!
2. 정렬 후 원하는 순서의 데이터 추출 _ 상위 하위 몇 개 몇 프로
이번에는 데이터가 가지는 여러가지 특성들 중에 특정 특성값에대해 상위 몇개 하위 몇개 혹은 상위 몇프로 하위 몇프로에 해당하는 데이터들을 추출하는 방법을 해보겠습니다. 그리고 나서 특정 셀 값을 수정하는 것을 다시 한 번 해보겠습니다.
< 실행 화면>
< 코드 >
12345678910111213141516sample.sort_values('물건금액', ascending=False).iloc[:5]sample.sort_values('물건금액', ascending=False).iloc[4:10]sample_apt = sample.loc[sample['건물주용도']=='아파트'].sort_values('물건금액', ascending=False)print(sample_apt.shape)sample_apt.iloc[:int(len(sample_apt)*0.0001)]sample_gangnam_apt = sample_apt.loc[(sample_apt['자치구명'] == '강남구')]sample_gangnam_apt.sort_values('물건금액', ascending=True).head(5)sample_gangnam_apt.loc[sample_gangnam_apt['건축년도']==0, '건축년도']sample_gangnam_apt.loc[64199, '건축년도'] = 1900sample_gangnam_apt.sort_values('물건금액', ascending=True).head(5)cs 본론 2에서는 데이터가 있을 때, 보통 상위 1%, 상위 5개, 하위 1%, 하위 5개 와 같이 특정 특성값을 기준으로한 결과를 원할 때를 고려해서 적어보았습니다. 데이터프레임에서 특정 컬럼의 값을 기준으로 내림차순 혹은 오름차순으로 정리하는 방법도 알게 되었습니다. 그리고 순서대로 잘라내서 추출할 때는 .iloc를 사용하죠. 그런데 결국 중요한 것은 특정 셀의 값을 수정할 때는 '.loc' 메서드를 사용한다는 점입니다.
저는 데이터 전처리 과정에서 결측값을 처리할 때 많이 쓰는 방법이라서 이렇게 공유드려 보았습니다.
판다스 데이터프레임의 행과 열에 대한 더 많은 내용이 궁금하신 분들은 아래 글들도 참고하시면 좋을 것 같습니다!
2021.01.20 - [▶파공's 취미 생활/▷파이썬 공부] - Pandas DataFrame 특정 로우(행) 호출, 수정, 추가, 삭제 하는 법
2020.09.07 - [▶파공's 취미 생활/▷파이썬 공부] - Pandas DataFrame 특정 컬럼 열_호출 추가 삭제하기
오늘도 글 읽어주셔서 감사합니다!
Look Rich or Be Rich
현명한 선택을 응원합니다.
- 파공 -
'▶파공's 취미 생활 > ▷파이썬 공부' 카테고리의 다른 글
Pandas DataFrame csv파일 엑셀파일 불러오기 읽기, utf-8 에러 해결법 (0) 2021.07.20 Pandas DataFrame_.copy() 카피 메소드, 데이터프레임 중간에 행 추가 삽입 (2) 2021.07.17 Pandas DataFrame Index 판다스 데이터프레임 인덱스 수정 (0) 2021.07.13 파이썬 포맷팅 Format (feat. %, {}, f-string) 알아보기 (0) 2021.03.09 Pandas DataFrame 특정 로우(행) 호출, 수정, 추가, 삭제 하는 법 (4) 2021.01.20