Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Pandas: เข้าถึงค่าสุดท้ายของ Series ด้วย iat

บทนำ

เมธอด 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 เร็วที่สุดและชัดเจนที่สุด