[Pandas] .at / .iat
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 대응체. 생성 <…
💬 댓글