Pandas에서 DataFrame 값을 가져올 때 헷갈리는 이유는 기준이 두 개라서다.
정리하면 간단하다. loc, at는 이름(label) 기준, iloc, iat는 정수 위치 기준이고, loc, iloc는 여러 값, at, iat는 단일 값 접근용이다.
한 번에 정리
메서드 기준 접근 범위 특징
| at | 이름(label) | 단일 값 | 가장 빠름 |
| iat | 정수 위치 | 단일 값 | 가장 빠름 |
| loc | 이름(label) | 여러 값 | 슬라이싱 가능 |
| iloc | 정수 위치 | 여러 값 | 배열처럼 접근 |
먼저 코드로 보면
import pandas as pd
df = pd.DataFrame({
"시가": [100, 200, 300],
"종가": [110, 210, 310]
}, index=["2026-04-01", "2026-04-02", "2026-04-03"])
1. iat → 정수 위치 + 단일 값
df.iat[0, 0]
- 첫 번째 행, 첫 번째 열
- 가장 빠른 접근 방식
- 한 개 값만 가져올 때 사용
2. at → 이름 기준 + 단일 값
df.at["2026-04-01", "시가"]
- index 이름 + column 이름
- 사람이 읽기 가장 직관적
3. loc → 이름 기준 + 여러 값
df.loc["2026-04-03", ["시가", "종가"]]
- label 기준 접근
- 여러 컬럼 선택 가능
- 슬라이싱 가능
df.loc["2026-04-01":"2026-04-03"]
4. iloc → 정수 위치 + 여러 값
df.iloc[2, [0, 1]]
- 배열처럼 접근
- 순서 기반 처리에 유리
get_loc()으로 위치 찾기
iloc는 정수 기반이라 위치를 알아야 한다. 이때 get_loc()을 같이 쓰면 연결된다.
row = df.index.get_loc("2026-04-03")
col = df.columns.get_loc("시가")
df.iloc[row, col]
이 패턴은 이름 기준 → 위치 기반 변환할 때 자주 사용된다.
언제 무엇을 써야 할까
단일 값이면
- 빠르게 → iat
- 이름 기준 → at
여러 값이면
- 이름 기준 → loc
- 순서 기준 → iloc
구현 관점 포인트
1. 기준이 다르면 결과도 달라진다
- loc → index 이름
- iloc → 위치 번호 같은 데이터라도 완전히 다르게 동작한다
2. 단일 값 접근은 at/iat가 더 빠르다
반복문에서 값 하나씩 꺼낼 때는 loc보다 at, iat가 더 효율적이다.
3. DataFrame은 2차원이기 때문에 항상 [행, 열] 구조다
df.loc[row, col]
df.iloc[row, col]
이 구조를 기본으로 생각해야 헷갈리지 않는다.
4. 이름 기반 → 위치 기반 변환 패턴 기억
df.index.get_loc()
df.columns.get_loc()
이건 iloc와 같이 쓰는 핵심 패턴이다.
한 줄 정리
loc/at는 이름 기준, iloc/iat는 위치 기준이며, 여러 값은 loc/iloc, 단일 값은 at/iat로 나누면 된다.
'Data Analytics > Python·Pandas' 카테고리의 다른 글
| Pandas apply와 lambda 정리 | 줄 단위 계산을 간단하게 처리하는 방법 (0) | 2026.04.29 |
|---|---|
| EDA란 무엇인가 | 데이터 분석에서 왜 먼저 해야 하는가 (0) | 2026.04.29 |
| Pandas DataFrame이란 | Series와 무엇이 다른가 (2) | 2026.04.24 |
| Pandas Series란 | 리스트·NumPy와 차이와 인덱스 활용 정리 (2) | 2026.04.24 |
| NumPy array란 | 파이썬 리스트와 차이, 벡터 연산까지 정리 (2) | 2026.04.24 |
