df['컬럼명']import pandas as pd
df = pd.DataFrame({
'이름': ['홍길동', '이순신', '강감찬'],
'나이': [25, 31, 29],
'점수': [90, 85, 95]
})
print(df['이름'])
# 0 홍길동
# 1 이순신
# 2 강감찬
# Name: 이름, dtype: object
df[['컬럼1', '컬럼2']]
print(df[['이름', '점수']])
# 이름 점수
# 0 홍길동 90
# 1 이순신 85
# 2 강감찬 95
실무팁:
- 컬럼 이름에 띄어쓰기나 특수문자가 있으면 반드시 대괄호(
[])로 호출해야 함- 컬럼을 변수로 받을 때도 리스트로
loc, iloc 차이와 활용법)loc – 라벨 기반 인덱싱
df.index = ['a', 'b', 'c'] # 인덱스를 문자로 바꿨을 때
print(df.loc['a']) # 'a' 행 반환 (Series)
print(df.loc[['a', 'c']]) # 'a', 'c' 행 반환 (DataFrame)
print(df.loc['a':'c']) # 슬라이싱 시 'c'까지 포함
# 행+열 동시 선택
print(df.loc['a', '이름']) # 홍길동
print(df.loc['a':'b', ['이름','점수']])
iloc – 정수 위치 기반 인덱싱
print(df.iloc[0]) # 0번째 행
print(df.iloc[[0,2]]) # 0, 2번째 행
print(df.iloc[0:2]) # 0, 1번째 행 (2번째는 포함X)
# 행+열 동시 선택
print(df.iloc[0, 1]) # 0번째 행, 1번째 열
print(df.iloc[0:2, 1:3]) # 0~1행, 1~2열
| 구분 | loc | iloc |
|---|---|---|
| 기준 | 라벨(이름) | 순서(숫자) |
| 슬라이스 | 끝 포함 | 끝 미포함 |
| 예시 | df.loc['a'] | df.iloc[0] |
# 나이가 30 이상인 사람만
print(df[df['나이'] >= 30])
# 이름이 '홍길동'인 행만
print(df[df['이름'] == '홍길동'])
# 여러 조건 조합 (&: and, |: or)
print(df[(df['나이'] > 25) & (df['점수'] > 90)])
주의: AND는 &, OR는 | 조건식 전체는 반드시 소괄호로 감싸야 함!
.loc, .iloc)
# 행 인덱스 a~b, 컬럼 '이름', '나이'
print(df.loc['a':'b', ['이름','나이']])
# 0~1번째 행, 0~1번째 열
print(df.iloc[0:2, 0:2])
# 한 행 추가 (ignore_index=True로 기존 인덱스 무시하고 새로 부여)
df2 = pd.concat([df, pd.DataFrame([{'이름':'김철수','나이':28,'점수':88}])], ignore_index=True)
print(df2)
# df2 = pd.concat([df, pd.DataFrame({'이름':'김철수', '나이':28, '점수':88})], ignore_index = True) -> 에러남
# 방식 1
df2 = pd.concat([df, pd.DataFrame({'이름':['김철수'], '나이':[28], '점수':[88]})], ignore_index = True)
# 방식 2
df2 = pd.concat([df, pd.DataFrame([{'이름':'김철수','나이':28,'점수':88}])], ignore_index=True)pd.concat으로 기존 df에 문제없이 추가 가능[ ... ]로 딕셔너리를 감싸서 → "딕셔너리의 리스트" 형태로 전달 이렇게 하면 Pandas는 → "딕셔너리 하나 = 데이터 한 행" → 딕셔너리의 key가 컬럼명, value가 해당 값 즉, 1개의 row(행)를 가진 DataFrame으로 인식
df['합격여부'] = df['점수'] >= 90
print(df)
assign() 메서드 활용
df2 = df.assign(평가=lambda x: x['점수'].apply(lambda s: 'A' if s>=90 else 'B'))
print(df2)
assign() 함수, apply() 함수assign() 함수DataFrame에 새로운 컬럼(파생변수)을 추가하고 싶을 때 사용
원본 DataFrame은 변하지 않고, 새 DataFrame을 반환
(즉, 원본 `df`는 그대로고, `df2`에 결과가 들어감)
df2 = df.assign(새컬럼이름=값 또는 함수)
새컬럼이름은 새로 만들 컬럼의 이름
키워드 인자 형태이기 때문에 ‘ ’ 로 감싸지 않아도 됨.
값 또는 함수를 넣을 수 있음 (대부분 함수를 많이 씀)
apply() 함수Series(컬럼) 또는 DataFrame에
각 행/각 값별로 "함수"를 적용하는 메서드
*즉, 반복문 없이도 "일괄적으로 가공"**할 수 있음
df['컬럼명'].apply(함수)
함수는 직접 정의한 것도, lambda(람다)도 가능!
drop()df.drop(index=) / df.drop(행이름, axis=0)df.drop(columns=) / df.drop(열이름, axis=1)
# 'a' 인덱스(행) 삭제
df1 = df.drop(index='a')
df.drop('a', axis=0) # 0번 인덱스 행 삭제 위와 같은 의미
df.drop(['a', 'c'], axis=0) # a, b번 인덱스 행 삭제
df.drop(index=['a', 'c']) # 같은 의미
# '점수' 컬럼 삭제
df2 = df.drop(columns='점수')
df.drop('이름', axis=1) # '이름' 열 삭제
df.drop(columns='이름') # 같은 의미
df.drop(['이름','점수'], axis=1) # 여러 열 삭제
df.drop(columns=['이름','점수']) # 같은 의미
# 여러 개 삭제
df3 = df.drop(index=['a','c'], columns=['점수'])
실무팁:
drop()은 기본적으로 복사본 반환.- 원본 변경은
inplace=True옵션df.drop(columns='점수', inplace=True)
| 선택/추출 | 사용법 | 반환 |
|---|---|---|
| 단일 열 선택 | df['col'] | Series |
| 복수 열 선택 | df[['col1', 'col2']] | DataFrame |
| 행(label) 선택 | df.loc['a'], df.loc[['a','c']] | Series/DataFrame |
| 행(정수) 선택 | df.iloc[0], df.iloc[[0,2]] | Series/DataFrame |
| 행+열 동시 선택 | df.loc['a','col'] / df.iloc[0,1] | 값(스칼라) |
| 슬라이싱 | df.loc['a':'c', ['col1']], df.iloc[0:2, 1:3] | DataFrame |
| 조건 필터링 | df[df['col']>값] | DataFrame |
| 행/열 추가 | df['새컬럼'] = 값, assign() | DataFrame |
| 행/열 삭제 | drop(index=...), drop(columns=...) | DataFrame |