[Pandas] 컬럼 선택
Pandas 컬럼, Pandas 열 선택, Pandas 컬럼 선택, df column select
정의
DataFrame 에서 하나 또는 여러 컬럼을 선택 하는 방법들. 가장 기본이자 가장 자주 쓰는 동작.
4 가지 기본 방식
df['name'] # 단일 컬럼 → Series
df[['name']] # 한 컬럼이지만 DataFrame
df[['name', 'age']] # 여러 컬럼 → DataFrame
df.name # attribute (제한적)
단일 vs 다중 (반환 타입 차이)
python
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]})
x = df['a'] # Series
y = df[['a']] # DataFrame (한 컬럼)
print(type(x).__name__, type(y).__name__)
print(x.shape, y.shape) 결과
Series DataFrame
(3,) (3, 1)대괄호 1 개 → Series, 대괄호 2 개 (리스트) → DataFrame.
attribute 접근의 제한
df.name # ✓ 동작
df.class # ❌ Python 예약어
df['1st'] # ✓ 동작
df.1st # ❌ 문법 오류
attribute 는 일관성이 없으므로 df['col'] 권장.
컬럼 순서 변경
df[['c', 'a', 'b']] # 명시적 순서로 재정렬한 새 DataFrame
df.reindex(columns=['c', 'a', 'b']) # 같음
패턴으로 선택
# 이름이 'amount_' 로 시작하는 컬럼만
df.filter(like='amount_')
# 정규식
df.filter(regex='^(name|age)$')
# dtype 기반
df.select_dtypes(include='number')
df.select_dtypes(include=['int64', 'float64'])
df.select_dtypes(exclude='object')
python
df = pd.DataFrame({
'name': ['A', 'B'],
'age': [20, 30],
'salary': [3000, 5000],
})
print(df.select_dtypes(include='number').columns.tolist())
print(df.filter(like='a').columns.tolist()) 결과
['age', 'salary']
['name', 'age', 'salary']컬럼 추가 / 삭제
df['bmi'] = df['weight'] / (df['height'] / 100) ** 2
df['constant'] = 100
df = df.drop(columns=['old_col'])
df = df.drop(columns=['a', 'b'])
# in-place 도 가능하지만 권장 안 함
df.drop(columns=['a'], inplace=True)
assign 으로 method chain
df_new = (df
.assign(bmi=lambda d: d['weight'] / (d['height']/100)**2)
.assign(category=lambda d: d['bmi'].apply(categorize))
)
체인 방식으로 새 컬럼을 추가, 원본 보존.
컬럼 이름 변경
df.rename(columns={'old_name': 'new_name'})
df.rename(columns=str.lower) # 모든 컬럼 소문자
df.columns = ['a', 'b', 'c'] # 직접 할당
함정
1. SettingWithCopyWarning
sub = df[df['age'] > 20]
sub['new'] = 1 # ⚠️ SettingWithCopyWarning
# 해법: .copy() 명시
sub = df[df['age'] > 20].copy()
sub['new'] = 1 # ✓
2. attribute 가 메서드와 충돌
df.shape, df.values, df.index 같은 attribute 가 있으면 같은 이름의 컬럼은 attribute 로 못 부른다.
df['shape'] # ✓ 컬럼
df.shape # DataFrame 의 shape attribute
참고
이 글의 용어 (3개)
- [Pandas] .loc / .ilocpandas
- 정의 - : 라벨 기반 인덱싱 (index/column 이름) - : 정수 위치 기반 인덱싱 (0-based) 이 두 indexer 가 pandas 선택의 표준. 만으로는 헷갈리…
- [Pandas] DataFramepandas
- 정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
- [Pandas] query / evalpandas
- 정의 - : 문자열로 boolean 표현식 을 전달해 행 필터링 - : 문자열로 계산 표현식 을 평가 의 가독성 있는 대안. query 기본 긴 조건일수록 query 가 짧고 읽…
💬 댓글