Pandas 데이터 분석: 고급 데이터 조작 기법
멀티인덱스와 피벗 테이블, 데이터 병합, 고급 필터링 및 변환 등의 기법
Pandas는 기본적인 데이터 조작뿐만 아니라, 실전 데이터 분석에서 유용한 고급 기능을 제공합니다. 이번 글에서는 멀티인덱스와 피벗 테이블, 데이터 병합, 고급 필터링 및 변환 등의 기법을 알아보겠습니다.
1. 멀티인덱스(MultiIndex)
멀티인덱스는 데이터프레임에서 여러 수준의 인덱스를 관리할 수 있는 기능으로, 계층적 데이터 처리가 가능하도록 도와줍니다.
1) 멀티인덱스 생성
1. 기본 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
# 데이터프레임 생성
data = {
"City": ["New York", "New York", "Chicago", "Chicago"],
"Year": [2020, 2021, 2020, 2021],
"Population": [8.3, 8.4, 2.7, 2.8]
}
df = pd.DataFrame(data)
# 멀티인덱스 설정
df = df.set_index(["City", "Year"])
print(df)
# 출력:
# Population
# City Year
# New York 2020 8.3
# 2021 8.4
# Chicago 2020 2.7
# 2021 2.8
2. 멀티인덱스 초기화
1
2
3
# 인덱스를 초기화
df_reset = df.reset_index()
print(df_reset)
2) 멀티인덱스 활용
1. 특정 레벨 선택
1
2
3
4
5
6
7
# 특정 레벨 선택
print(df.loc["New York"])
# 출력:
# Population
# Year
# 2020 8.3
# 2021 8.4
2. 인덱스 레벨 집계
1
2
3
4
5
6
7
# 레벨별 그룹화 및 합계
print(df.groupby(level="City").sum())
# 출력:
# Population
# City
# Chicago 5.5
# New York 16.7
2. 피벗 테이블(Pivot Table)
피벗 테이블은 데이터를 요약하거나 집계하는 데 사용됩니다.
1) 기본 사용법
pivot_table()
함수를 사용하여 데이터를 요약합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 데이터프레임 생성
data = {
"City": ["New York", "New York", "Chicago", "Chicago"],
"Year": [2020, 2021, 2020, 2021],
"Population": [8.3, 8.4, 2.7, 2.8],
"Income": [60000, 62000, 55000, 57000]
}
df = pd.DataFrame(data)
# 피벗 테이블 생성
pivot = df.pivot_table(values="Income", index="City", columns="Year", aggfunc="mean")
print(pivot)
# 출력:
# Year 2020 2021
# City
# Chicago 55000.0 57000.0
# New York 60000.0 62000.0
2) 다양한 집계 함수
1. 여러 집계 함수 적용
1
2
3
# 여러 집계 함수 적용
pivot = df.pivot_table(values=["Population", "Income"], index="City", aggfunc=["mean", "sum"])
print(pivot)
3. 고급 필터링 및 변환
1) 조건부 필터링
Pandas는 고급 조건 필터링을 통해 데이터를 선택적으로 처리할 수 있습니다.
예제
1
2
3
# 특정 조건의 데이터 필터링
filtered = df[(df["City"] == "New York") & (df["Year"] == 2021)]
print(filtered)
2) 조건부 변환
apply()
와 applymap()
함수는 데이터를 조건에 따라 변환하는 데 유용합니다.
1. 열 단위 변환
1
2
3
# Income이 60000 이상이면 'High', 아니면 'Low'
df["Income_Level"] = df["Income"].apply(lambda x: "High" if x >= 60000 else "Low")
print(df)
2. 전체 데이터프레임 변환
1
2
3
# 데이터프레임의 모든 값에 함수 적용
df_transformed = df[["Population", "Income"]].applymap(lambda x: x / 1000)
print(df_transformed)
4. 데이터 병합과 조인
Pandas는 데이터 병합(merge)과 조인(join)을 통해 복잡한 데이터 관계를 처리할 수 있습니다.
1) 병합(Merge)
예제
1
2
3
4
5
6
7
# 데이터프레임 생성
df1 = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]})
df2 = pd.DataFrame({"ID": [1, 2, 4], "Age": [25, 30, 35]})
# 병합
merged = pd.merge(df1, df2, on="ID", how="inner")
print(merged)
2) 조인(Join)
예제
1
2
3
4
5
6
7
# 데이터프레임 생성
df1 = pd.DataFrame({"Name": ["Alice", "Bob", "Charlie"]}, index=[1, 2, 3])
df2 = pd.DataFrame({"Age": [25, 30, 35]}, index=[1, 2, 4])
# 조인
joined = df1.join(df2, how="outer")
print(joined)
정리
- 멀티인덱스는 계층적 데이터 처리를 위한 강력한 도구입니다.
- 피벗 테이블은 데이터를 요약하고 집계하는 데 효과적입니다.
- 고급 필터링과 변환 기능은 데이터를 조건부로 처리하거나 변환하는 데 유용합니다.
- 병합과 조인은 데이터프레임 간의 관계를 처리하고 통합된 데이터를 생성하는 데 사용됩니다.
다음 글 예고:
이제 Pandas 학습을 마무리하며, 실제 분석 프로젝트에 활용할 수 있는 사례를 다뤄보겠습니다!
This post is licensed under CC BY 4.0 by the author.