자격증공부/빅데이터분석기사 실기
[Pandas] idxmax() 결과 변환의 숨겨진 이유
악마토끼
2025. 6. 18. 14:03
데이터 분석을 하다 보면 가끔 이런 코드를 마주치게 됩니다:
python
dfmax = dfratio.idxmax(axis=1)
dfmax_reset = dfmax.reset_index().rename({0: '범죄유형'}, axis=1)
언뜻 보면 결과값이 똑같아 보이는데, 왜 굳이 아래 코드가 필요한 걸까요? 이 궁금증을 해결해보겠습니다.
두 코드의 실제 차이점
첫 번째 코드: Series 형태
dfmax = dfratio.idxmax(axis=1)
print(type(dfmax)) # <class 'pandas.core.series.Series'>
print(dfmax)
결과:
0 범죄유형3
1 범죄유형2
2 범죄유형5
dtype: object
이는 Series 객체로, 인덱스는 원래 데이터의 행 번호(또는 연도 등)이고, 값은 해당 행에서 최댓값을 가진 열의 이름입니다.
두 번째 코드: DataFrame 형태
dfmax_reset = dfmax.reset_index().rename({0: '범죄유형'}, axis=1)
print(type(dfmax_reset)) # <class 'pandas.core.frame.DataFrame'>
print(dfmax_reset)
결과:
index 범죄유형
0 0 범죄유형3
1 1 범죄유형2
2 2 범죄유형5
이는 DataFrame 객체로, 기존 인덱스가 'index' 열이 되고, 값들이 '범죄유형' 열이 됩니다.
왜 이런 변환이 필요할까?
1. 다른 데이터와의 병합 용이성
Series는 다른 DataFrame과 병합할 때 제약이 있습니다:
# Series로는 이런 작업이 복잡함
other_data = pd.DataFrame({'연도': [2020, 2021, 2022], '총합': [100, 150, 200]})
# DataFrame이면 쉽게 병합 가능
result = pd.concat([other_data, dfmax_reset], axis=1)
2. 명확한 컬럼명 지정
Series는 기본적으로 컬럼명이 없거나 숫자로 처리됩니다:
# Series: 컬럼명이 모호함
dfmax.to_csv('result.csv') # 컬럼명이 '0'으로 저장됨
# DataFrame: 명확한 컬럼명
dfmax_reset.to_csv('result.csv') # '범죄유형'으로 저장됨
3. 시각화와 분석의 편의성
많은 시각화 라이브러리나 분석 함수들이 DataFrame 형태를 선호합니다:
import seaborn as sns
# DataFrame이면 바로 시각화 가능
sns.countplot(data=dfmax_reset, x='범죄유형')
# Series는 추가 변환이 필요함
sns.countplot(x=dfmax.values) # 축 레이블이 명확하지 않음
4. 후속 데이터 처리 작업
# DataFrame이면 다양한 그룹핑과 집계가 자유로움
crime_counts = dfmax_reset.groupby('범죄유형').size()
# 다른 열과의 조인도 간편함
final_result = dfmax_reset.merge(crime_details, on='범죄유형')
💛요약!
같은 데이터, 다른 활용도
- Series: 단순한 조회나 인덱싱 작업에 적합
- DataFrame: 복합적인 데이터 분석과 시각화에 적합
언제 변환해야 할까?
- 다른 데이터와 병합해야 할 때
- 명확한 컬럼명이 필요할 때
- 시각화나 리포팅을 해야 할 때
- 추가적인 그룹핑이나 집계가 필요할 때
반응형