CH1. 데이터 전처리 완벽 가이드(1) | Notion
0. 데이터 분석? 데이터 전처리?
www.notion.so
데이터 인덱싱과 슬라이싱
판다스로 데이터프레임을 다루면서 특정 행이나 열을 선택하거나, 부분적으로 데이터를 추출하는 작업이 매우 중요합니다.
이를 위해 인덱싱(indexing)과 슬라이싱(slicing) 기능을 사용합니다.
판다스에서는 인덱싱/슬라이싱을 위해 라벨(label) 기반과 정수 위치(integer position) 기반 두 가지 접근을 모두 지원하는데, 각각 .loc와 .iloc 인덱서를 사용합니다.
.loc - 라벨(label) 기반 인뎅싱
- .loc[행인덱스, 열이름] 형식으로 사용하며, 인덱스 이름이나 컬럼 이름을 사용하여 원하는 부분의 데이터를 가져옵니다.
- 행과 열 부분 모두 라벨을 기준으로 하기 때문에, 예를 들어 df.loc['2021-01-01', 'Sales']는 인덱스가 '2021-01-01'인 행의 'Sales' 컬럼 값을 가져옵니다.
df = pd.DataFrame({'val': [10, 20, 30, 40]}, index=['a','b','c','d'])
print(df)
val
a 10
b 20
c 30
d 40
: 인덱스 라벨은 'a','b','c','d'입니다. .loc을 사용하여 인덱스 라벨 'a'부터 'c'까지의 행을 선택
print(df.loc['a':'c'])
val
a 10
b 20
c 30
.loc['a':'c']는 끝 점 'c'를 포함하여 'a','b','c' 행을 가져옵니다. 라벨 슬라이싱은 양끝을 모두 포함 하는 점에 유의하세요.
(문자 라벨뿐 아니라 숫자 라벨이어도 .loc[1:3] 이라면 1,2,3 인덱스를 모두 포함)
- 단일 행/열 선택
- df.loc['b']처럼 인덱스 'b'인 한 행을 선택하면 그 행이 Series로 반환됩니다.
- 또한 df.loc[:, 'val']처럼 :를 사용해 모든 행에 대해 특정 열만 선택할 수도 있습니다.
- 예를 들어 df.loc['b', 'val']은 'b'행의 'val'값(20)을 반환하고, df.loc[['a','c'], 'val']은 인덱스 a와 c 행의 'val'열 값을 선택합니다.
- 조건 사용
- .loc 인덱싱에는 불리언 배열(조건)도 사용할 수 있습니다.
- 예를 들어 df.loc[df['val'] > 20] 이런 식으로 .loc에 행 조건을 전달해 해당 조건을 만족하는 행을 추출할 수 있습니다.
.iloc - 정수 위치(integer position) 기반 인덱싱
- .iloc[행번호, 열번호] 형식으로, 0부터 시작하는 정수 인덱스 위치로 데이터를 선택합니다. 파이썬의 리스트 슬라이싱과 유사하게 동작하며, 끝 범위를 포함하지 않습니다.
- 예를 들어 df.iloc[0:2]는 행번호 0,1 (두 개 행)을 가져옵니다 (2는 제외).
위에서 사용한 동일한 예제 df에 대해 .iloc으로 첫 두 행을 선택하면:
print(df.iloc[0:2])
val
a 10
b 20
결과에서 인덱스 'a','b' 행만 얻었고, 행번호 2에 해당하는 'c' 행은 포함되지 않았습니다.
.iloc[0:2]는 0번, 1번 행을 의미하며, 일반적인 파이썬 슬라이싱처럼 끝 인덱스 2는 제외되는 것을 확인할 수 있습니다.
.loc() vs .iloc() 차이 🔥🔥🔥🔥🔥
- .loc['a':'c']는 a, b, c 세 행을 반환했고
- .iloc[0:2]는 a, b 두 행만 반환했습니다.
- 이처럼 .loc는 라벨 범위의 끝을 포함하고 .iloc는 끝 인덱스 번호를 제외합니다.
- .iloc은 정수 위치로만 접근하므로 인덱스가 숫자여도 라벨로 취급되지 않는 점에 유의해야 합니다.
- 예를 들어 인덱스가 0,1,2,3인 경우 df.loc[0:2]는 0,1,2 행을 주지만, df.iloc[0:2]는 0,1 행을 줍니다.
열 선택과 슬라이싱
- 컬럼 선택
- DataFrame에서 특정 열(시리즈)를 선택하는 간단한 방법은 df['컬럼명'] 표기입니다.
- 예를 들어 orders['Profit']은 orders 데이터프레임에서 'Profit' 컬럼만 추출하여 Series로 반환합니다.
- 여러 컬럼을 선택하려면 df[['컬럼1','컬럼2']] 처럼 리스트로 컬럼명을 전달합니다.
- 이는 .loc로도 동일하게 할 수 있는데, df.loc[:, ['컬럼1','컬럼2']]와 같은 표현은 모든 행에 대해 두 컬럼을 선택합니다.
- 행 슬라이싱
- 행을 범위로 슬라이싱할 때 .loc과 .iloc를 모두 사용할 수 있습니다.
- 예를 들어 처음 5개 행을 가져오려면 df.iloc[:5] 또는 만약 인덱스 라벨이 순서형이라면 df.loc[ 시작라벨 : 끝라벨 ] 형태로도 가능합니다.
- 다만 보통은 행은 .iloc로 번호 기반 슬라이싱을, 열은 이름으로 지정하는 혼합 형태를 쓰기도 합니다.
- 예: df.iloc[:5, :3]는 첫 5행, 첫 3열 데이터를 선택
- value_counts() 를 통해 특정 컬럼의 값 분포를 확인할 수 있습니다.
- ex. df[특정 컬럼].value_counts() ⭐️⭐️⭐️
'데이터 전처리 & 시각화' 카테고리의 다른 글
| [데이터 전처리] 조건 필터링(filtering) (1) | 2025.08.28 |
|---|---|
| [데이터 전처리] 데이터 불러오기 및 저장(CSV, Excel, JSON 등) (1) | 2025.08.28 |
| [데이터 전처리] Pandas 소개 및 설치 | Series와 DataFrame 기본 구조 (1) | 2025.08.28 |