Post

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.