[TIL] 내일배움캠프 35일차_[Python] 인덱스, 데이터프레임
👀Today I Learn
멀티 인덱스와 복합 인덱스
1. 멀티 인덱스(MultiIndex)란?
- 하나 이상의 인덱스를 사용하여 데이터 프레임의 행과 열을 구조화
- 다차원 데이터를 보다 효율적으로 관리하고 분석 가능하게 함
2. 멀티 인덱스 생성하기
set_index()
-
여러 열을 사용해 멀티 인덱스 설정 가능
# '도시'와 '년도'를 멀티 인덱스로 설정 df_multi_index = df.set_index(['도시', '년도'])
- 도시와 년도가 인덱스로 설정되어, 데이터가 더 구조화된 형태
from_tuples()
-
pd.MultiIndex.from_tuples()
를 사용해 튜플로 구성된 멀티 인덱스 생성 가능# 멀티 인덱스를 튜플로 직접 생성 index = pd.MultiIndex.from_tuples([('서울', 2021), ('서울', 2022), ('부산', 2021), ('부산', 2022)], names = ["도시", "년도"]) # 데이터프레임에 적용 df_multi_index = pd.DataFrame({'인구수': [9700000, 9720000, 3400000, 3450000]}, index=index)
3. 멀티 인덱스 데이터 접근하기
loc[]
-
멀티 인덱스 안에서 특정 데이터 선택 가능
# 특정 인덱스의 데이터 선택 df_multi_index.loc['서울']
-
하위 레벨까지 지정하여 더 구체적인 접근 가능
# '서울'의 2021년 데이터 선택 df_multi_index.loc[('서울', 2021)]
슬라이싱(Slicing)
-
슬라이싱을 통해 특정 구간의 데이터를 쉽게 선택 가능
# 부산의 모든 데이터를 선택 df_multi_index = df_multi_index.sort_index() df_multi_index.loc['부산':'부산']
xs()
- 멀티 인덱스 교차 선택
-
특정 레벨에서 데이터를 선택하거나, 레벨을 넘어서 데이터를 선택할 때 유용
# '도시' 레벨에서 '서울'의 데이터를 선택 print(df_multi_index.xs('서울', level='도시'))
4. 복합 인덱스(MultiIndex) 활용
인덱스 정렬 및 정렬된 상태 확인
- 데이터프레임은 정렬된 상태로 관리하는 것이 일반적
-
sort_index()
로 인덱스를 정렬 가능# 멀티 인덱스 정렬 df_sorted = df_multi_index.sort_index()
인덱스 변환
unstack()
: 멀티 인덱스를 열로 변환-
stack()
: 열을 인덱스로 변환# 멀티 인덱스를 열로 변환 (unstack) df_unstacked = df_multi_index.unstack(level='년도')
-
stack()
을 사용하면 다시 인덱스 변환 가능# 다시 인덱스로 변환 (stack) df_stacked = df_unstacked.stack()
5. 멀티 인덱스의 응용
그룹화(Grouping)와 함께 사용
- 멀티 인덱스는 그룹화와 함께 사용할 때 더 강력해짐.
-
그룹화한 데이터를 멀티 인덱스로 변환하여 복잡한 분석 수행 가능
# 데이터프레임 생성 data = { '도시': ['서울', '서울', '부산', '부산', '서울', '부산'], '년도': [2021, 2022, 2021, 2022, 2021, 2022], '인구수': [9700000, 9720000, 3400000, 3450000, 9800000, 3500000], '소득': [60000, 62000, 45000, 46000, 63000, 47000] } df = pd.DataFrame(data) # '도시'와 '년도'를 기준으로 그룹화하여 평균 계산 grouped_df = df.groupby(['도시', '년도']).mean()
데이터프레임 구조화 다시하기와 크기 조정하기
1. 데이터프레임 구조화 다시하기
- 데이터프레임의 구조를 재조정하여, 데이터를 원하는 형태로 변형
- 주요 작업
- 피벗(pivot)
- 변경(melt)
- 스택(stack)과 언스택(unstack)
피벗 테이블 생성
pivot()
을 사용- 열 데이터를 행 또는 열로 이동시켜 새로운 데이터프레임을 만듦
-
데이터를 재구성하고 분석하는데 매우 유용
# '도시'를 기준으로 '날짜'를 인덱스로, '온도'를 값으로 하는 피벗 테이블 생성 pivot_df = df.pivot(index='날짜', columns='도시', values='온도')
- 날짜를 인덱스로, 도시를 열로 하여 각 온도 값을 피벗 테이블로 변환
데이터 구조 해체
melt()
를 사용- 피벗된 데이터를 다시 긴 형식(long format)으로 변환할 때 사용
-
여러 열을 하나의 열로 통합하는 데 유용
# 데이터프레임 구조 해체 (melt) melted_df = pd.melt(df, id_vars=['날짜', '도시'], value_vars=['온도', '습도'])
- 온도와 습도 열이 하나의 열(
variable
)로 통합melt()
- 온도와 습도 열이 하나의 열(
데이터 변환
stack()
과unstack()
을 사용stack()
: 열 데이터를 인덱스의 하위 레벨로 이동unstack()
:stack()
과 반대 작업을 수행
# '도시' 레벨을 인덱스로 스택(stack) stacked_df = pivot_df.stack() print(stacked_df) # >>**도시**가 인덱스로 변환 # 다시 언스택(unstack)하여 원래 구조로 복원 unstacked_df = stacked_df.unstack() print(unstacked_df) # >> 원래의 **피벗 테이블** 형태로 돌아옴
2. 데이터프레임 크기 조정하기
- 데이터프레임의 크기를 조정하여 데이터를 분석하기에 적합한 형태로 조정
행과 열 추가
- 새로운 열을 추가할 때는 새로운 데이터를 할당하면 됨
-
df['새로운 열'] = 값
의 형태로 추가 가능# 새로운 열 추가 df['날씨'] = ['맑음', '흐림', '맑음', '흐림'] # >> 새로운 열(날씨)이 추가
행과 열 삭제하기
- 행과 열 삭제는
drop()
함수를 사용 -
axis=0
은 행을,axis=1
은 열을 삭제# '습도' 열 삭제 df_dropped = df.drop(columns=['습도']) # >> 습도 열이 삭제
# 특정 행 삭제 (예: 첫 번째 행) df_dropped_row = df.drop(index=0) # >> 첫 번째 행이 삭제
데이터 병합
- 데이터프레임을 병합할 때는
concat()
과merge()
를 사용 -
데이터를 추가하거나 병합하는 데 사용
# 행을 기준으로 데이터프레임 병합 (concat) merged_df = pd.concat([df, df2], ignore_index=True) # >> 새로운 데이터가 병합되어 데이터프레임의 크기가 **확장됨**
💡Today I Thought
오늘의 체크리스트
- 머신러닝 과제 마무리
- TIL 작성
회고
저번 챕터 때 판다스 공부 좀 더 할껄 싶었던 이번주ㅎㅎ 다음 챕터에 가서는 이번 챕터를 또 후회하겠지ㅠㅠ
댓글남기기