
DataFrame과 Series의 index, DataFrame의 columns
Series.index, DataFrame.index, DataFrame.columns는
모두 pandas.Index 객체로, 각각 row labels 또는 column labels의 집합을 나타냄.
- 이들은 immutable하여 개별 원소 수정은 불가능하지만,
- 새로운
Index객체로 전체 교체가 가능하며, - 집합 연산(union, intersection 등)등을 지원함.
1. Series객체의 index 속성
- 정의:
Series의 row labels 를 담는 객체 - 자료형:
pandas.Index - 특징:
- immutable 성질을 가지므로 개별 원소 수정은 불가
- 하지만 새로운 Index 객체로 전체 교체는 가능
- 집합 연산 지원 (교집합, 합집합 등 가능)
import pandas as pd
# Series 생성
s = pd.Series([10, 20, 30], index=["a", "b", "c"])
print("원래 Series:\n", s)
# 불변성 확인 (부분 수정 불가)
try:
s.index[0] = "z"
except TypeError as e:
print("부분 수정 오류 발생:", e)
# 전체 교체 (가능)
s.index = ["x", "y", "z"]
print("전체 교체 후 Series:\n", s)
# 집합 연산
print("Index 합집합:", s.index.union(["y", "w"]))
2. DataFrame객체의 index 속성
- 정의:
DataFrame의 row labels를 담는 객체 - 자료형:
pandas.Index - 특징:
Series.index와 동일하게 불변: 개별 수정 불가- 새로운
Index객체로 전체 교체 가능 - slicing, sorting, filtering 등에 활용
DataFrame객체 생성시
명시적으로 index를 지정하지 않으면,RangeIndex객체가 자동으로 설정됨.
이는 [0, n-1]의 자연수 index임.
DataFrame의 set_index() 메서드로 명시적으로 특정 column을 index로 설정가능하며,reset_index() 메서드로 현재의 index를 column으로 보내거나(drop=False) 아예 삭제(drop=True)하고, 새로운 RangeIndex객체를 생성하여 index속성을 초기화할수도 있음.
2023.09.20 - [Python/pandas] - [Pandas] Index 지정 관련 메서드 : reset_index, set_index
[Pandas] Index 지정 관련 메서드 : reset_index, set_index
DataFrame 인스턴스에서 index를 새로 만들거나 다른 column을 index로 지정하는데 사용된다.reset_indexDataFrame 인스턴스에서 기존 index 대신하는 새로운 index를 만든다.drop 파라메터의 값을 True로 지정한
ds31x.tistory.com
다음을 실행시켜 결과를 확인하라.
# DataFrame 생성
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35]
}, index=["id1", "id2", "id3"])
print("원래 DataFrame:\n", df)
# 불변성 확인 (부분 수정 불가)
try:
df.index[0] = "idx0"
except TypeError as e:
print("부분 수정 오류 발생:", e)
# 전체 교체 (가능)
df.index = ["idx1", "idx2", "idx3"]
print("전체 교체 후 DataFrame:\n", df)
3. DataFrame 객체의 columns 속성
- 정의:
DataFrame의 column의 labels 를 담는 객체 - 자료형:
pandas.Index - 특징:
• immutable 성질을 가짐: 개별 수정 불가
• 전체 교체는 가능
• 집합 연산 지원
print("원래 columns:", df.columns)
# 불변성 확인 (부분 수정 불가)
try:
df.columns[0] = "FullName"
except TypeError as e:
print("부분 수정 오류 발생:", e)
# 전체 교체 (가능)
df.columns = ["FullName", "Years"]
print("전체 교체 후 DataFrame:\n", df)
# 집합 연산
print("열 이름 교집합:", df.columns.intersection(["Years", "City"]))
4. rename() 를 통한 부분 라벨 변경 (partial label renaming)
- 목적: 전체 교체 없이 일부 index/columns 라벨만 선택적으로 변경
- 동작:
- 존재하지 않는 label을 변경대상으로 지정시 기본적으로 무시(
errors='ignore'). - 변경대상으로 지정되지 않은 나머지 labels는 보존.
- 존재하지 않는 label을 변경대상으로 지정시 기본적으로 무시(
시그니처(signature, pandas 2.x 기준)
DataFrame.rename(
mapper=None, *,
index=None, columns=None,
axis=None, copy=None,
inplace=False, level=None,
errors='ignore'
)
파라미터 설명
mapper: dict-like 또는 callable 객체axis파리미터와 함께 사용 권장.axis로 지정한 축의 labels를 일괄 변경- 권장: 혼동 방지를 위해
index=또는columns=를 사용 (서로 배타적)
axis:{0/'index', 1/'columns'}mapper와 함께 사용할 때 대상 축 지정 (지정 안하면mapper는 row에 적용됨.)- 아래의
index/columns와 동시에 사용하지 않음(배타적)
index: dict-like 또는 callable 객체- row labels 변경
axis파리미터와 배타적.- 예)
index={'old_idx':'new_idx'}또는index=str.upper
columns: dict-like 또는 callable 객체- column labels 변경
axis파리미터와 배타적.- 예)
columns={'old':'new'}또는columns=str.lower
level:MultiIndex에서 특정 레벨만 변경- 정수 레벨 또는 레벨 이름(=level label)
inplace:True면 원본에서 직접 변경,False면 새 객체 반환- 기본:
False
copy: (버전에 따라 의미 변화 가능) 새 객체 반환 시 복사 여부 힌트 (자주 바뀐 터라... 사용하지 말길 권장.?)errors:{'ignore','raise'}- 매핑에 없는 라벨을 무시할지/에러를 낼지 (기본 'ignore')
import pandas as pd
df = pd.DataFrame(
{"FullName": ["Alice", "Bob"], "Years": [25, 30]},
index=["idx1", "idx2"]
)
# 1) columns 일부만 dict로 변경
df1 = df.rename(columns={"FullName": "Name"})
# 결과: columns -> ['Name', 'Years']
# 2) index 일부만 dict로 변경
df2 = df.rename(index={"idx1": "row1"})
# 결과: index -> ['row1', 'idx2']
# 3) 함수로 일괄 변경 (columns를 대문자로)
df3 = df.rename(columns=str.upper)
# 결과: columns -> ['FULLNAME', 'YEARS']
# 4) mapper + axis 사용 (권장하진 않지만 가능)
df4 = df.rename(mapper=str.lower, axis="columns")
# 결과: columns -> ['fullname', 'years']
# 5) MultiIndex level 지정 (예시)
cols = pd.MultiIndex.from_tuples([("meta", "FullName"), ("data", "Years")])
df_mi = pd.DataFrame([["Alice", 25], ["Bob", 30]], columns=cols)
df_mi2 = df_mi.rename(columns={"meta": "info"}, level=0)
# 결과: level=0의 'meta' -> 'info'
4. 요약
index속성과 columns속성 모두 the collection of labels.
Series.index:Series의 row labelsDataFrame.index:DataFrame의 row labelsDataFrame.columns:DataFrame의 column labels- 세 속성 모두
pandas.Index객체임.- 개별 원소 수정은 불가 (immutable)
- 새로운
Index객체로 전체 교체는 가능 - 집합 연산 지원
관련된 methods는 다음과 같음:
set_index()로 특정 컬럼을 인덱스로 설정reset_index()로 인덱스를 컬럼으로 이동/삭제하고 RangeIndex로 초기화 가능rename()로 일부 라벨만 선택적 변경 (dict매핑 또는 callable,errors='ignore'기본)
같이 보면 좋은 자료들
'Python > pandas' 카테고리의 다른 글
| [Pandas] isin() 메서드: 가독성 높은 boolean mask 만들기. (2) | 2025.08.28 |
|---|---|
| [Pandas] Boolean Mask 와 where()/mask() (1) | 2025.08.28 |
| [Pandas] melt() 메서드 (2) | 2025.08.24 |
| [Pandas] missing value 확인: 결측치 확인 (0) | 2025.08.24 |
| [Pandas] unique(), value_counts(), nunique() (0) | 2025.08.23 |