본문으로 건너뛰기
김신건의 로그

[Pandas] .at / .iat

· 수정 · 📖 약 1분 · 311자/단어 #python #pandas #selection #indexing #scalar
Pandas at, Pandas iat, Pandas .at / .iat, Pandas .at, Pandas .iat, scalar pandas indexer

정의

  • .at[] : 단일 스칼라 (한 행, 한 열) 의 라벨 기반 접근
  • .iat[] : 단일 스칼라의 정수 위치 기반 접근

Pandas .loc / .iloc단일 셀 전용 빠른 버전. 내부 검증 단계를 단순화해 가장 빠른 셀 접근을 제공.

사용

import pandas as pd
df = pd.DataFrame(
    {'age': [25, 30], 'salary': [3000, 4500]},
    index=['Alice', 'Bob']
)

df.at['Alice', 'age']     # 25, label 기반
df.iat[0, 0]               # 25, 위치 기반

df.at['Alice', 'age'] = 99
df.iat[0, 0] = 99

.loc / .iloc 와의 차이

항목.loc / .iloc.at / .iat
슬라이스✗ (단일 셀만)
리스트
boolean mask✓ (loc만)
단일 셀 속도보통더 빠름

루프 안에서 셀을 자주 읽는다면 .at / .iat 이 유의미하게 빠르다.

벤치마크 감

python
import pandas as pd
import time

df = pd.DataFrame({'x': range(100_000)})

t1 = time.time()
total = 0
for i in range(100_000):
  total += df.iloc[i, 0]
print(f'iloc loop: {time.time()-t1:.2f}s')

t2 = time.time()
total = 0
for i in range(100_000):
  total += df.iat[i, 0]
print(f'iat loop:  {time.time()-t2:.2f}s')

t3 = time.time()
total = df['x'].sum()
print(f'sum():     {time.time()-t3:.4f}s')
결과
iloc loop: 2.31s
iat loop:  1.12s
sum():     0.0008s

.iat.iloc 보다 빠르지만, 루프 자체가 비싸다. 벡터 연산 (df['x'].sum()) 이 압도적으로 빠르다.

IMPORTANT

.at / .iat.loc / .iloc 보다 빠른 건 사실 이지만, 그래도 pandas 의 정답은 루프 회피, 벡터 연산. 루프가 정말 필요한 경우에만 .at/.iat 의 미세 최적화가 의미 있다.

사용 예

행/열 단일 셀 값 수정

df.at[user_id, 'last_login'] = pd.Timestamp.now()
df.iat[-1, df.columns.get_loc('status')] = 'DONE'

마지막 행의 특정 컬럼

df.iat[-1, df.columns.get_loc('value')]

함정

1. 슬라이스 / 리스트 불가

df.at['Alice':'Bob', 'age']    # ❌ TypeError
df.loc['Alice':'Bob', 'age']   # ✓

여러 셀이 필요하면 .loc / .iloc.

2. 존재하지 않는 라벨 → KeyError

df.at['Unknown', 'age']    # KeyError

.loc 도 같다, 하지만 .at 은 더 엄격하게 즉시 throw.

3. dtype 변경

df.iat[0, 0] = 'hello'     # int 컬럼에 str 할당, 컬럼 dtype 이 object 로 변경됨

참고

이 글의 용어 (3개)
[Pandas] .loc / .ilocpandas
정의 - : 라벨 기반 인덱싱 (index/column 이름) - : 정수 위치 기반 인덱싱 (0-based) 이 두 indexer 가 pandas 선택의 표준. 만으로는 헷갈리…
[Pandas] 컬럼 선택pandas
정의 DataFrame 에서 하나 또는 여러 컬럼을 선택 하는 방법들. 가장 기본이자 가장 자주 쓰는 동작. 4 가지 기본 방식 단일 vs 다중 (반환 타입 차이) <CodeWi…
[Pandas] DataFramepandas
정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…

이 개념을 다룬 위키 페이지 (1)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기