บทนำ
เมธอด iat[] ใน Pandas ใช้เข้าถึงค่าเดียว (scalar) โดยตำแหน่ง integer (position-based) เร็วกว่า iloc[] และ loc[] สำหรับการเข้าถึงค่าเดี่ยว รองรับ negative indexing
ตัวอย่างโค้ด
import pandas as pd
# สร้าง Series
data = pd.Series([10, 20, 5, 65, 75, 85, 30, 100])
print("Series:")
print(data)
# เข้าถึงค่าแรกและสุดท้าย
first = data.iat[0]
last = data.iat[-1]
print(f"\nค่าแรก (iat[0]): {first}")
print(f"ค่าสุดท้าย (iat[-1]): {last}")
ผลลัพธ์
Series:
0 10
1 20
2 5
3 65
4 75
5 85
6 30
7 100
dtype: int64
ค่าแรก (iat[0]): 10
ค่าสุดท้าย (iat[-1]): 100
เปรียบเทียบ: iat vs iloc vs loc vs at
| เมธอด | การเข้าถึง | รองรับ slice | รองรับ label | ความเร็ว |
|---|---|---|---|---|
| iat[] | Integer position (scalar) | ❌ | ❌ | เร็วที่สุด |
| iloc[] | Integer position | ✅ | ❌ | เร็ว |
| loc[] | Label-based | ✅ | ✅ | ปานกลาง |
| at[] | Label-based (scalar) | ❌ | ✅ | เร็ว (สำหรับ label) |
ตัวอย่างเพิ่มเติม
# DataFrame: iat[row, col]
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]}, index=['x','y','z'])
print(df.iat[0, 0]) # 1 (แถวแรก คอลัมน์แรก)
print(df.iat[-1, -1]) # 6 (แถวสุดท้าย คอลัมน์สุดท้าย)
print(df.iat[1, 1]) # 5
# เปรียบเทียบความเร็ว
import timeit
s = pd.Series(range(10000))
print("iat:", timeit.timeit(lambda: s.iat[0], number=100000))
print("iloc:", timeit.timeit(lambda: s.iloc[0], number=100000))
print("loc:", timeit.timeit(lambda: s.loc[0], number=100000))
# iat เร็วที่สุดสำหรับ scalar access
ข้อควรระวัง
iatไม่รองรับ slice:s.iat[0:3]→ Error- ต้องใช้ integer position เท่านั้น ไม่รองรับ label
- Out of bounds → IndexError
- ใช้กับ DataFrame ต้องระบุ 2 มิติ:
df.iat[row, col]
สรุป
ใช้ iat[0] สำหรับค่าแรก และ iat[-1] สำหรับค่าสุดท้ายของ Series/DataFrame เมื่อต้องการเข้าถึง scalar โดย position เร็วที่สุดและชัดเจนที่สุด