[Python 기초]

[Python Preprocessing] DataFrame Editing 정리

dyk98 2024. 11. 27. 19:52

데이터프레임 구조화와 크기 조정

1. 데이터프레임 구조화

데이터프레임의 구조를 재조정하면 데이터를 원하는 형태로 변형하고, 분석하기 적합한 상태로 만들 수 있습니다. 판다스에서는 다음과 같은 주요 작업이 사용됩니다:

1.1 pivot()을 사용한 피벗 테이블 생성

  • 특정 열 데이터를 행 또는 열로 이동하여 새 데이터프레임을 만듭니다.
  • 데이터를 요약하거나 분석하는 데 유용합니다.
import pandas as pd

# 데이터 생성
data = {
    '날짜': ['2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02'],
    '도시': ['서울', '서울', '부산', '부산'],
    '온도': [2, 3, 6, 7],
    '습도': [55, 60, 80, 85]
}
df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot_df = df.pivot(index='날짜', columns='도시', values='온도')
print(pivot_df)

결과:

도시        부산  서울
날짜
2023-01-01  6  2
2023-01-02  7  3

1.2 melt()를 사용한 데이터 구조 해체

  • *긴 형식(long format)**으로 데이터를 변환합니다.
  • 여러 열을 하나의 열로 통합할 때 유용합니다.
# 데이터 구조 해체
melted_df = pd.melt(df, id_vars=['날짜', '도시'], value_vars=['온도', '습도'])
print(melted_df)

결과:

          날짜  도시  variable  value
0  2023-01-01  서울     온도      2
1  2023-01-02  서울     온도      3
2  2023-01-01  부산     온도      6
3  2023-01-02  부산     온도      7
4  2023-01-01  서울     습도     55
5  2023-01-02  서울     습도     60
6  2023-01-01  부산     습도     80
7  2023-01-02  부산     습도     85

1.3 stack()과 unstack()을 사용한 데이터 변환

  • stack(): 열 데이터를 인덱스 하위 레벨로 이동.
  • unstack(): 인덱스를 열로 이동하여 원래 구조 복원.
# 스택
stacked_df = pivot_df.stack()
print(stacked_df)

# 언스택
unstacked_df = stacked_df.unstack()
print(unstacked_df)

스택 결과:

날짜          도시
2023-01-01  부산    6
            서울    2
2023-01-02  부산    7
            서울    3
dtype: int64

언스택 결과:

도시        부산  서울
날짜
2023-01-01  6  2
2023-01-02  7  3

2. 데이터프레임 크기 조정

데이터프레임의 크기를 조정하려면 열 추가, 행 삭제, 데이터 병합 등의 작업을 수행할 수 있습니다.

2.1 행과 열 추가

  • 열 추가: 새 데이터를 할당하여 간단히 열을 추가할 수 있습니다.
# 열 추가
df['날씨'] = ['맑음', '흐림', '맑음', '흐림']
print(df)

결과:

          날짜  도시  온도  습도  날씨
0  2023-01-01  서울    2   55  맑음
1  2023-01-02  서울    3   60  흐림
2  2023-01-01  부산    6   80  맑음
3  2023-01-02  부산    7   85  흐림

2.2 행과 열 삭제

  • drop(): 특정 행 또는 열 삭제.
# 열 삭제
df_dropped = df.drop(columns=['습도'])
print(df_dropped)

# 행 삭제
df_dropped_row = df.drop(index=0)
print(df_dropped_row)

결과 (열 삭제):

          날짜  도시  온도  날씨
0  2023-01-01  서울    2  맑음
1  2023-01-02  서울    3  흐림
2  2023-01-01  부산    6  맑음
3  2023-01-02  부산    7  흐림

결과 (행 삭제):

          날짜  도시  온도  습도  날씨
1  2023-01-02  서울    3   60  흐림
2  2023-01-01  부산    6   80  맑음
3  2023-01-02  부산    7   85  흐림

2.3 데이터 병합

  • concat(): 행(row) 또는 열(column) 단위로 데이터프레임 연결.
# 새로운 데이터프레임
data2 = {
    '날짜': ['2023-01-03', '2023-01-04'],
    '도시': ['서울', '부산'],
    '온도': [5, 8],
    '습도': [70, 75],
    '날씨': ['맑음', '흐림']
}
df2 = pd.DataFrame(data2)

# 데이터프레임 병합
merged_df = pd.concat([df, df2], ignore_index=True)
print(merged_df)

결과:

          날짜  도시  온도  습도  날씨
0  2023-01-01  서울    2   55  맑음
1  2023-01-02  서울    3   60  흐림
2  2023-01-01  부산    6   80  맑음
3  2023-01-02  부산    7   85  흐림
4  2023-01-03  서울    5   70  맑음
5  2023-01-04  부산    8   75  흐림