이번 포스팅에서는 판다스에서 원하는 결과가 나오지 않을 때 가장 먼저 확인해야 할 것을 알려 드립니다!
결론부터 말씀드리면
함수 적용결과가 내 예상과 다르다면 먼저 함수 적용대상을 print 함수로 출력해 확인하세요.
예) df.head(2)의 결과가 내 예상과 다르다면
print(df)로 내가 함수를 적용한 대상 df를 확인하세요.
예시
import pandas as pd
data1 = {'이름':list('ABCD'), '국어': [62, 67, 92, 86], '영어': [89, 78, 77, 72], '수학': [61, 63, 97, 82]}
df = pd.DataFrame(data1)
위 df는 A, B, C, D 네 사람의 국어와 영어, 수학 성적을 나타낸 데이터 프레임입니다.
국어 성적으로 정렬해 국어 성적이 상위인 두명의 성적만 보고 싶다면
그러면 먼저 sort_values로 정렬을 하고 head를 써서 윗 두줄만 가져오면 됩니다. (물론 다른 방법도 많습니다)
작업 과정1. sort_values로 정렬합니다. (내림 차순 정렬이므로 ascending=False)
df.sort_values('국어', ascending=False)
output:
C와 D가 각각 92점과 86점으로 상위권입니다.
작업과정2. df에 head를 적용해 상위 두명의 성적만 가져옵니다.
이 포스팅을 읽는 분들중에 많은 분들이 C와 D의 데이터만 추려질 것으로 기대를 할지도 모릅니다.
df.head(2)
output:
그렇지만 예상과는 달리 A와 B의 성적이 추출됩니다.
???
이것은 판다스 초심자가 가장 많이 실수를 하는 부분으로
판다스 함수 적용 결과는 원본(여기서는 df)을 덮어쓰지 않는 것이 원인입니다.
df에 sort_values를 적용한다고 df가 정렬이 되는 것은 아닙니다.
df.sort_values('국어', ascending=False)라는 정렬된 데이터 프레임이 생성 되는 것 뿐이지 원본인 df는 그대로입니다.
그래서 원하는 결과를 얻으려면 아래와 같은 코드를 사용해야 합니다.
df.sort_values('국어', ascending=False).head(2)
그렇지만 원인보다 더 중요한 것은 코드를 점검하는 방법입니다.
여러분이 함수를 적용하고 원하는 결과를 얻지 못했다면
최소한 함수 적용대상을 출력해서 눈으로 확인하는 습관을 들여야 합니다.
df.head(2)가 내가 원하는 결과를 얻지 못했을 때 최소한 head를 적용한 df는 출력을 해서 확인을 해봐야 한다는 것입니다.
print(df)
output:
df를 출력해 보았다면 sort_values 함수를 적용해도 df의 원본이 바뀌지 않았다는 것을 알 수 있고,
df.head(2)의 결과가 왜 A, B를 반환하는지 스스로 점검할 수 있었을 것입니다.
결론
판다스에서는 함수 적용결과는 대부분 원본을 덮어쓰지 않습니다.
그래서 아래와 같이 연속 메서드로 코드를 써야 합니다.
# 정렬과 상위 2개의 행 추출을 연속 메서드로 적용
df.sort_values('국어', ascending=False).head(2)
만약 위처럼 연속 메서드로 사용하는 것이 싫다면 함수 적용결과를 원본에 지정해 원본을 변경해야 합니다.
# df를 국어 열로 정렬한 결과를 다시 df로 지정
df = df.sort_values('국어', ascending=False)
# df의 상위 2개의 행 추출
df.head(2)
그렇지만 그것보다 더 중요한 것은 내 스스로 최소한의 코드 점검은 해야 한다는 겁니다.
함수 적용 결과가 내 예상과 다르다면 가장 먼저 함수 적용대상을 출력해 보세요!
쉽게 문제가 풀릴 것입니다.
유튜브에서 판다스 강의 중입니다
https://www.youtube.com/@KimPandas
'여러 가지 이야기 > 잡다한 이야기' 카테고리의 다른 글
강의를 그대로 따라 했는데 왜 나만 에러가 발생할까요? (0) | 2023.08.14 |
---|---|
온라인 코딩 강의를 듣는 분들은 에러가 나면 반드시 AI부터 돌려보세요! (0) | 2023.08.14 |
[pandas] 포괄적인 규칙성을 찾는 이들에게 드리는 조언 (0) | 2023.07.16 |
[slack] 슬랙에서 코드블럭 사용하는 방법 (0) | 2023.07.10 |
나의 개발 환경(파이썬 IDE)이 강의와 다르다면 어떻게 해야 할까요? (0) | 2023.06.10 |