Pandas loc, iloc, at, iat 정리 | DataFrame 값 접근 기준 한 번에 정리

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로 나누면 된다.