iloc ใน pandas ผมใช้สำหรับเลือกแถวและคอลัมน์ด้วยตำแหน่งตัวเลข (0-based index) เหมือนการอ้างอิงเซลล์ใน Excel ด้วยเลขแถว-คอลัมน์ครับ ต่างจาก loc ตรงที่ iloc ไม่สนใจชื่อ index — ดูแค่ว่าอยู่ตำแหน่งที่เท่าไหร่เท่านั้น
df.iloc[row_indexer, col_indexer]
df.iloc[row_indexer, col_indexer]
DataFrame
ประเภทผลลัพธ์ขึ้นอยู่กับสิ่งที่เลือกครับ — ถ้าเลือกหลายแถว/คอลัมน์ได้ DataFrame, ถ้าเลือกแถวเดียวหรือคอลัมน์เดียวได้ Series, ถ้าเลือกเซลล์เดียวได้ scalar ค่านั้น ผมใช้ iloc บ่อยในรูปแบบ slice เพื่อตัดส่วนของตารางออกมาทำงานต่อครับ
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| row_indexer | int | slice | list[int] | ndarray | Yes | ตำแหน่งแถวที่ต้องการ เช่น 0 (แถวแรก), -1 (แถวสุดท้าย), 0:3 (แถว 0-2), [0,2,4] (แถวเฉพาะ) | |
| col_indexer | int | slice | list[int] | ndarray | Optional | ทุกคอลัมน์ | ตำแหน่งคอลัมน์ที่ต้องการ เช่น 1 (คอลัมน์ที่ 2), 0:2 (คอลัมน์แรกสอง), [0,2] (คอลัมน์เฉพาะ) ถ้าไม่ใส่จะได้ทุกคอลัมน์ |
df.iloc[0]df.iloc[0]
name Alice
score 85
grade B
Name: 0, dtype: object
df.iloc[0:3]df.iloc[0:3]
name score grade
0 Alice 85 B
1 Bob 92 A
2 Carol 78 C
df.iloc[:, 0:2]df.iloc[:, 0:2]
name score
0 Alice 85
1 Bob 92
2 Carol 78
3 Dave 95
df.iloc[1, 1]df.iloc[1, 1]
92
ต่างกันที่ว่าใช้อะไรอ้างอิงครับ iloc ใช้ตำแหน่ง (integer position) เสมอ เช่น iloc[0] คือแถวแรกไม่ว่า index ของ DataFrame จะเป็นอะไร ส่วน loc ใช้ label (ชื่อ index หรือชื่อคอลัมน์) เช่น loc[‘Alice’] หรือ loc[0, ‘score’] ผมจำง่ายๆ ว่า iloc = ตำแหน่ง, loc = ชื่อ ครับ
เป็นแบบนี้ทั้ง Python ครับ ไม่ใช่แค่ iloc — slice แบบ start:stop ในภาษา Python ไม่รวม stop ตัวท้าย เลยได้แถวที่ 0, 1, 2 ครบ 3 แถว ถ้าอยากได้ 4 แถวให้เขียน iloc[0:4] ครับ เหมือนกฎเดียวกับ list[0:3] ทุกประการ
head(n) ดึงแถวแรก n แถวเสมอครับ ส่วน iloc ยืดหยุ่นกว่า — ดึงแถวกลางๆ ได้ เช่น iloc[5:10] หรือข้ามๆ ได้เช่น iloc[[0,2,4]] head() สั้นกว่าถ้าแค่อยากดู n แถวแรก แต่ iloc ใช้ตอนต้องการควบคุมมากกว่านั้นครับ
iloc ย่อมาจาก integer location ครับ — มันคือวิธีเข้าถึงข้อมูลใน DataFrame โดยอ้างอิงตำแหน่งแถวและคอลัมน์เป็นตัวเลข เริ่มนับที่ 0 เหมือนภาษา Python ทั่วไป เช่น iloc[0] คือแถวแรก, iloc[-1] คือแถวสุดท้าย
รูปแบบหลักที่ผมใช้บ่อยมี 4 แบบ: iloc[row] เลือกแถวเดียว, iloc[start:stop] slice หลายแถว, iloc[:, col] เลือกคอลัมน์ด้วยตำแหน่ง, และ iloc[row, col] เลือกเซลล์เดียวเป๊ะๆ ครับ
ที่เจ๋งคือ iloc ทำงานได้สม่ำเสมอไม่ว่า index ของ DataFrame จะเป็นเลขเรียงปกติ ตัวเลขสลับ หรือแม้แต่ชื่อเป็น string — มันไม่แคร์ มองแค่ว่า “แถวที่ N” คืออะไร ทำให้ดีบักง่ายมากตอนข้อมูลมี index แปลกๆ ✨
ส่วนตัวผมแนะนำให้จำง่ายๆ ว่า iloc = “ตำแหน่ง” (integer) ส่วน loc = “ชื่อ” (label) ถ้าจะเลือกข้อมูลตาม row number ให้ใช้ iloc ถ้าจะเลือกตามชื่อ index หรือชื่อคอลัมน์ให้ใช้ loc ครับ 😎