| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- Ollama
- tauri
- 정렬
- scikit-learn
- docker
- pandas
- CSS
- cli
- io
- 이미지
- curl
- 열선택
- FileChannel
- Typescript
- RandomAccessFile
- scaler
- Python
- Vite
- Docker Compose
- Java
- PowerShell
- podman
- UV
- Webpack
- vscode
- vim
- drop_first
- json schema
- json
- yaml
- Today
- Total
워로디스
Pandas. df[...]와 .loc[...]의 행 또는 열 선택 기준 본문
pandas가 헷갈리는 이유는 비슷한 대괄호 문법이 상황에 따라 다르게 해석되기 때문입니다. 핵심은 df[...]와 .loc[...]의 해석 기준이 서로 다르다는 점입니다.
1. df[...]는 안에 들어온 값의 종류에 따라 의미가 달라진다
df['Fare']
'Fare'는 열 이름이므로 열 선택입니다.
df[['Fare', 'Age']]
열 이름들의 리스트이므로 역시 열 선택입니다.
반면:
df[df['Fare'] < 3000]
먼저
df['Fare'] < 3000
의 결과는 다음과 같은 Boolean Series입니다.
0 True
1 True
2 False
3 True
...
그리고 pandas는
df[boolean_series]
형태를 만나면 Boolean 값에 따라 행을 필터링합니다.
따라서:
df[df['Fare'] < 3000]
은
Fare값이 3000보다 작은 행들을 선택
한다는 뜻입니다.
즉 df[...]는 다음처럼 해석됩니다.
| 표현 | 의미 |
|---|---|
df['Fare'] |
열 선택 |
df[['Fare', 'Age']] |
여러 열 선택 |
df[boolean_series] |
행 선택 |
그래서 df[...]는 항상 행 선택 또는 항상 열 선택인 문법이 아닙니다.
2. .loc은 자리로 행과 열을 구분한다
.loc의 기본 구조는 다음과 같습니다.
df.loc[행선택, 열선택]
즉:
df.loc[ A , B ]
↑ ↑
행 열
예를 들어:
df.loc[:, 'Fare']
는
:→ 모든 행'Fare'→ Fare 열
이므로 Fare 열을 선택합니다.
반대로:
df.loc[df['Fare'] < 3000, :]
는
df['Fare'] < 3000→ 조건에 맞는 행:→ 모든 열
이므로 조건에 맞는 행들을 선택합니다.
3. .loc도 두 번째 항목은 생략할 수 있다
다음 두 표현은 같은 의미입니다.
df.loc[df['Fare'] < 3000]
df.loc[df['Fare'] < 3000, :]
.loc[...] 안에 하나만 쓰면 첫 번째 자리인 행 선택으로 해석합니다.
즉:
df.loc[A]
는 사실상
df.loc[A, :]
입니다.
따라서:
df.loc['Fare']
라고 하면 'Fare'를 열 이름으로 보는 것이 아니라 행 인덱스의 label로 해석합니다.
열만 고르려면 반드시:
df.loc[:, 'Fare']
처럼 써야 합니다.
4. df[...]와 .loc[...]의 핵심 차이
가장 중요한 차이는 이것입니다.
df[...]
안에 들어온 객체의 종류를 보고 pandas가 의미를 판단합니다.
df['Fare'] # 문자열 → 열df[['A', 'B']] # 열 이름 리스트 → 열df[mask] # Boolean Series → 행
.loc[...]
쉼표 기준 자리로 행과 열을 판단합니다.
df.loc[행, 열]
따라서:
df.loc[mask] # 행df.loc[:, 'Fare'] # 열df.loc[mask, 'Fare'] # 행 조건 + 열 선택
5. 기억하기 좋은 기준
df[...]는:
무엇을 넣었는지에 따라 행/열의 의미가 바뀐다.
.loc[...]는:
어느 자리에 넣었는지에 따라 행/열이 결정된다.
그래서 pandas 코드를 읽을 때는 .loc을 다음 구조로 기억하면 가장 편합니다.
df.loc[행, 열]
그리고 하나만 있으면:
df.loc[행]
즉 열 부분이 생략된 것이라고 생각하면 됩니다.
참고로 .loc[...] 안의 행선택, 열선택을 엄밀하게는 함수의 파라미터(parameter) 라기보다는 인덱서(indexer) 라고 부르는 편이 더 정확합니다.
'Data Science > Pandas' 카테고리의 다른 글
| Pandas. value_counts() 용례 (0) | 2026.09.28 |
|---|---|
| Pandas. 최빈값 (0) | 2026.09.23 |
| Pandas. apply() 정리 — 함수의 입력과 출력 (0) | 2026.08.27 |
| Pandas. DataFrameGroupBy 객체 내용 확인 (0) | 2026.08.06 |
| Pandas. stack() 과 unstack() (0) | 2026.08.06 |
