iloc ใน pandas ผมใช้สำหรับเลือกแถวและคอลัมน์ด้วยตำแหน่งตัวเลข (0-based index) เหมือนการอ้างอิงเซลล์ใน Excel ด้วยเลขแถว-คอลัมน์ครับ ต่างจาก loc ตรงที่ iloc ไม่สนใจชื่อ index — ดูแค่ว่าอยู่ตำแหน่งที่เท่าไหร่เท่านั้น
DataFrame
ประเภทผลลัพธ์ขึ้นอยู่กับสิ่งที่เลือกครับ — ถ้าเลือกหลายแถว/คอลัมน์ได้ DataFrame, ถ้าเลือกแถวเดียวหรือคอลัมน์เดียวได้ Series, ถ้าเลือกเซลล์เดียวได้ scalar ค่านั้น ผมใช้ iloc บ่อยในรูปแบบ slice เพื่อตัดส่วนของตารางออกมาทำงานต่อครับ
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| row_indexer | int | slice | list[int] | ndarray | ตำแหน่งแถวที่ต้องการ เช่น 0 (แถวแรก), -1 (แถวสุดท้าย), 0:3 (แถว 0-2), [0,2,4] (แถวเฉพาะ) | |
| [col_indexer]ไม่บังคับ | int | slice | list[int] | ndarray | ทุกคอลัมน์ | ตำแหน่งคอลัมน์ที่ต้องการ เช่น 1 (คอลัมน์ที่ 2), 0:2 (คอลัมน์แรกสอง), [0,2] (คอลัมน์เฉพาะ) ถ้าไม่ใส่จะได้ทุกคอลัมน์ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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 ครับ 😎
ผมใช้ iloc[0] เพื่อดึงแถวแรกออกมาครับ ได้ผลออกมาเป็น Series โดยมี index เป็นชื่อคอลัมน์ เหมือนการอ่านข้อมูลแถวที่ 1 ใน Excel ตรงๆ เลย ถ้าอยากได้แถวสุดท้ายใช้ iloc[-1] ได้เลยครับ
ผมใช้ slice 0:3 เพื่อดึงแถวที่ 0, 1, 2 ออกมาครับ (ไม่รวมแถวที่ 3 — Python นับแบบไม่รวมตัวหลัง) ได้ DataFrame 3 แถวแรกกลับมา เหมือนดูข้อมูล 3 บรรทัดแรกแบบ head(3) เลยครับ
ผมใช้ : ในส่วนแถว (แปลว่าทุกแถว) แล้วระบุ 0:2 ในส่วนคอลัมน์เพื่อดึงเฉพาะคอลัมน์ที่ 0 และ 1 (name กับ score) ครับ มีประโยชน์มากตอนเราไม่รู้ชื่อคอลัมน์แน่นอน แต่รู้ว่าต้องการคอลัมน์แรกกี่ตัว
ผมระบุ iloc[1, 1] เพื่อดึงค่าจากแถวที่ 1 คอลัมน์ที่ 1 ซึ่งก็คือ score ของ Bob ครับ เหมือนการพิมพ์พิกัดเซลล์ใน Excel เช่น B2 ผลได้เป็นค่าตัวเลขเดียว ไม่ใช่ DataFrame หรือ Series
ต่างกันที่ว่าใช้อะไรอ้างอิงครับ 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 ใช้ตอนต้องการควบคุมมากกว่านั้นครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas iloc จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
head ใน pandas ผมใช้สำหรับดูข้อมูลแถวแรกๆ ของ DataFrame เพื่อเช็กว่าโหลดข้อมูลมาถูกต้องหรือเปล่า คล้ายกับการ scroll ไปดูบนสุดของตาราง Excel เลยครับ
df.tail(n) ผมใช้สำหรับดึงแถวท้ายสุด n แถวของ DataFrame ออกมาดูเร็วๆ ครับ เหมือนตอนเปิด Excel แล้วกด Ctrl+End เพื่อเลื่อนไปดูข้อมูลแถวล่างสุดของตาราง — มันคือคู่หูของ head ที่ดูแถวบนสุดนั่นเอง
df.loc ใน pandas ผมใช้สำหรับเลือกข้อมูลจาก DataFrame โดยระบุ label ของแถวและคอลัมน์ ไม่ว่าจะเลือกแถวเดียว หลายแถว หรือกรองด้วยเงื่อนไข Boolean เหมือนการกด Ctrl+F ใน Excel แต่ทรงพลังกว่ามากครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่