본문 바로가기
여러 가지 이야기/잡다한 이야기

[pandas] 내가 생각한 결과가 나오지 않을 때 가장 먼저 확인해야 할 것

by 김판다t 2023. 8. 12.

이번 포스팅에서는 판다스에서 원하는 결과가 나오지 않을 때 가장 먼저 확인해야 할 것을 알려 드립니다!

 

결론부터 말씀드리면
함수 적용결과가 내 예상과 다르다면 먼저 함수 적용대상을 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