Pandas에서 reset_index를 사용해야 하는 이유

Pandas에서 reset_index를 사용해야 하는 이유

Pandas
Pandas에서 reset_index를 사용해야 하는 이유
Author

gabriel yang

Published

August 24, 2024

Reset_index를 사용해야 하는 이유

데이터 분석을 하다 보면, 데이터프레임의 인덱스를 초기화하거나 기존의 인덱스를 열로 변환해야 할 때가 있습니다. 이때 pandasreset_index() 함수는 매우 유용합니다.

reset_index()는 데이터프레임의 인덱스를 기본 인덱스로 초기화하면서 기존 인덱스를 데이터의 열로 변환할 수 있게 해줍니다. 이 글에서는 reset_index()를 사용해야 하는 이유와 사용 방법을 예시와 함께 설명하겠습니다.

1. reset_index를 사용해야 하는 이유

reset_index()는 다음과 같은 상황에서 유용하게 사용됩니다:

계층적 인덱스를 열로 변환하고 싶을 때

그룹화 연산 또는 pivot_table 같은 작업 후 계층적 인덱스가 생성되면, 이를 열로 변환하여 일반적인 데이터프레임 형태로 만들고 싶을 때 사용합니다.

pandas의 계층적 인덱스(Hierarchical Indexing)는 데이터를 여러 단계의 인덱스(즉, 다중 인덱스)로 구성하여, 복잡한 데이터 구조를 더욱 효율적으로 다룰 수 있게 해주는 기능입니다.

계층적 인덱스 예

import pandas as pd

# 예제 데이터프레임 생성
data = {
    'Year': [2020, 2020, 2021, 2021],
    'Product': ['Product_A', 'Product_B', 'Product_A', 'Product_B'],
    'Region': ['North', 'South', 'North', 'South'],
    'Sales': [200, 150, 220, 180]
}

df = pd.DataFrame(data)

# Year와 Product를 계층적 인덱스로 설정
df_multi_index = df.set_index(['Year', 'Product'])

df_multi_index
Region Sales
Year Product
2020 Product_A North 200
Product_B South 150
2021 Product_A North 220
Product_B South 180

위의 코드에서는 set_index함수를 사용해서 YearProduct를 갖는 계층적 인덱스를 설정했습니다.

기존 인덱스를 제거하고 기본 인덱스로 초기화하고 싶을 때

분석 중에 기존 인덱스가 더 이상 필요하지 않거나, 새로운 분석을 위해 인덱스를 초기화할 필요가 있을 때 사용합니다.

데이터프레임을 인덱스를 포함한 전체 데이터로 저장하고 싶을 때

인덱스를 데이터로 포함하여 CSV 또는 Excel 파일로 저장하고자 할 때, 인덱스를 열로 변환해야 합니다.

2. reset_index() 사용 방법

2.1 기본 사용법

기본적으로 reset_index()는 인덱스를 초기화하면서 기존 인덱스를 데이터프레임의 열로 변환합니다. 예제를 통해 이를 살펴보겠습니다.

import pandas as pd

# 예제 데이터프레임 생성
data = {
    'Year': [2020, 2020, 2021, 2021],
    'Product': ['Product_A', 'Product_B', 'Product_A', 'Product_B'],
    'Sales': [200, 150, 220, 180]
}

df = pd.DataFrame(data)
df
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180

reset_index 예시를 위한 데이터를 생성합니다. 데이터는 YearProduct에 중복 데이터가 존재하는 long format데이터 입니다.

# Year와 Product로 그룹화한 후, Sales의 합계를 구함
grouped_df = df.groupby(['Year', 'Product']).sum()
display(grouped_df)
display(grouped_df.index)
Sales
Year Product
2020 Product_A 200
Product_B 150
2021 Product_A 220
Product_B 180
MultiIndex([(2020, 'Product_A'),
            (2020, 'Product_B'),
            (2021, 'Product_A'),
            (2021, 'Product_B')],
           names=['Year', 'Product'])

group_by명령을 이용해서 YearProduct로 데이터를 묶고 합을 구합니다. 결과의 index정보를 확인하면 위와 같이 MultiIndex를 갖는 것을 알 수 있습니다.

# 인덱스를 초기화하여 일반 데이터프레임으로 변환
reset_df = grouped_df.reset_index()

# 결과 확인
display(reset_df)
display(f"index : {reset_df.index}")
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180
'index : RangeIndex(start=0, stop=4, step=1)'
  • 기존 데이터프레임: groupby 연산 후, YearProduct가 인덱스로 설정되어 있습니다.
  • reset_index() 사용 후: YearProduct가 다시 열로 변환되었으며, 기본 인덱스(0부터 시작하는 숫자 인덱스)가 추가되었습니다.

수행 결과인 reset_df의 형태를 살펴보면 MultiIndex의 정보가 각각 열로 나누어져 저장되고 새로운 Index가 생성되었습니다.

2.3 drop 옵션 사용

때로는 기존 인덱스를 열로 변환하지 않고 완전히 삭제하고 싶을 때가 있습니다. 이 경우 drop=True 옵션을 사용합니다.

# 인덱스를 삭제하고 기본 인덱스로 초기화
reset_df_dropped = grouped_df.reset_index(drop=True)

# 결과 확인
reset_df_dropped
Sales
0 200
1 150
2 220
3 180
  • drop=True: 기존 인덱스를 데이터프레임에서 삭제하고, 기본 인덱스를 생성합니다. 결과 데이터 프레임에는 Index 정보가 삭제되었습니다.

2.4 inplace 옵션 사용

reset_index()를 호출할 때 원본 데이터프레임을 직접 수정하고 싶다면 inplace=True 옵션을 사용할 수 있습니다.

# 원본 데이터프레임을 직접 수정하여 인덱스를 초기화
grouped_df.reset_index(inplace=True)

# 결과 확인
grouped_df
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180

이 옵션을 사용하면 reset_index() 후에 grouped_df는 인덱스가 초기화된 상태로 변환됩니다.

3. 언제 reset_index를 사용해야 할까?

reset_index() 함수는 다음과 같은 상황에서 사용됩니다:

  • 그룹화 후 데이터프레임을 열 중심으로 다루고 싶을 때: 그룹화 후 분석을 위해 인덱스를 열로 변환해 데이터를 더 직관적으로 다룰 수 있습니다.

  • 데이터 저장 또는 시각화 전 처리: 데이터프레임을 파일로 저장하거나 시각화할 때 인덱스를 포함시키고 싶을 때 유용합니다.

  • 다양한 인덱스 변환 작업이 필요할 때: 복잡한 계층적 인덱스를 열로 변환하거나 특정 작업을 위해 인덱스를 초기화하고자 할 때 사용됩니다.

4. 결론

pandas.reset_index() 함수는 데이터프레임의 인덱스를 초기화하거나, 기존 인덱스를 열로 변환하는 데 매우 유용한 도구입니다. 데이터를 더 직관적으로 관리하거나, 저장 및 시각화를 위한 전처리 과정에서 자주 사용됩니다. 데이터 분석 과정에서 reset_index()의 활용 방법을 익혀 두면, 인덱스 조작과 관련된 다양한 상황에서 유연하게 대처할 수 있을 것입니다.

<h3>카테고리 다른 글</h3>
Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Oct 3, 2024 Pandas에서 Column 추가 및 삭제하는 방법 gabriel yang
Oct 3, 2024 Pandas 데이터프레임 mongodb에 저장하기 gabriel yang
Sep 21, 2024 Pandas에서 결측치(NaN) 처리하기 gabriel yang
Sep 11, 2024 Pandas SQL 쿼리 이용하기 gabriel yang
Aug 29, 2024 Pandas에서 데이터 형식 변경하기 gabriel yang
Aug 29, 2024 Pandas에서 데이터를 정렬하는 방법 gabriel yang
Aug 29, 2024 Pandas에서 인덱싱 및 슬라이싱하는 방법 gabriel yang
Aug 27, 2024 Pandas SQL 데이터베이스 읽어오기 gabriel yang
Aug 26, 2024 Pandas groupby 사용방법 gabriel yang
Aug 26, 2024 Pandas에서 두 개의 데이터프레임을 연결하기 gabriel yang
Aug 24, 2024 Pandas에서 melt를 사용해야 하는 데이터 유형과 사용 방법 gabriel yang
Aug 24, 2024 Pandas에서 pivot_table 사용하기 gabriel yang
Aug 22, 2024 Pandas Excel과 CSV 파일을 읽어오는 방법 gabriel yang
Aug 19, 2024 Pandas DataFrame의 컬럼 이름 변경하기 gabriel yang
Aug 17, 2024 Pandas SettingWithCopyWarning 문제 해결 gabriel yang
Nov 30, 2023 Dataframe을 Dict로 생성 및 변환 gabriel yang
Nov 29, 2023 python datetime 사용법 정리 gabriel yang
Sep 14, 2023 Pandas 중복 데이터 제거하기 gabriel yang
No matching items
Back to BLOG LIST