Thep Excel

pandas locเลือกแถวและคอลัมน์ด้วย label

df.loc ใน pandas ผมใช้สำหรับเลือกข้อมูลจาก DataFrame โดยระบุ label ของแถวและคอลัมน์ ไม่ว่าจะเลือกแถวเดียว หลายแถว หรือกรองด้วยเงื่อนไข Boolean เหมือนการกด Ctrl+F ใน Excel แต่ทรงพลังกว่ามากครับ

>_
df.loc[row_label] df.loc[row_label, col_label] df.loc[boolean_mask] df.loc[boolean_mask, [col1, col2]]

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

ได้คืนเป็น DataFrame เมื่อ row selector เลือกหลายแถว และ column selector เลือกหลายคอลัมน์ครับ แต่ถ้า row selector เป็น label เดี่ยวจะได้ Series, ถ้าทั้ง row และ col เป็น scalar เดี่ยวจะได้ scalar โดยตรงเลย

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
row_label label | slice | boolean array | callable ระบุแถวที่ต้องการ — ใช้ชื่อ index เดี่ยว, slice ของชื่อ, array of boolean, หรือ callable ที่รับ DataFrame แล้ว return selector ก็ได้
[col_label]ไม่บังคับ label | list | slice ทุกคอลัมน์ ระบุคอลัมน์ที่ต้องการ — ถ้าไม่ใส่จะได้ทุกคอลัมน์ ใส่ชื่อเดี่ยวได้ Series ใส่ list ได้ DataFrame

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

df.loc เป็นวิธีหลักที่ pandas ใช้เลือกข้อมูลแบบ label-based ครับ ต่างจาก df.iloc ที่ดูตำแหน่งตัวเลข — loc ดูที่ชื่อ index และชื่อคอลัมน์จริงๆ เลย ไม่ต้องนับว่าแถวที่กี่ตำแหน่ง

รูปแบบพื้นฐานคือ df.loc[row_selector, column_selector] — ตัวแรกบอกแถว ตัวที่สองบอกคอลัมน์ ถ้าใส่แค่ตัวเดียวผมจะได้ทุกคอลัมน์ของแถวนั้น ถ้าอยากเลือกเฉพาะคอลัมน์ก็ใส่ตัวที่สองเพิ่มได้เลย

ที่เจ๋งที่สุดของ loc สำหรับผมคือ Boolean mask — เอาเงื่อนไขเช่น df[‘age’] > 25 ใส่เข้าไป pandas จะคืนเฉพาะแถวที่ผ่านเงื่อนไขกลับมา เหมือน AutoFilter ใน Excel แต่เขียนใน code ได้เลย ✨

ส่วนตัวผมใช้ loc บ่อยกว่า iloc เพราะชื่อ column บอกความหมายชัดเจนกว่าตัวเลขครับ ถ้าข้อมูลมีการเพิ่ม/ลบคอลัมน์ทีหลัง code ที่ใช้ loc ก็ยังทำงานถูกต้องอยู่ ต่างจาก iloc ที่อาจเพี้ยนได้ถ้าลำดับเปลี่ยน 😎

Examples

ตัวอย่างที่ 1: กรองแถวด้วย Boolean maskdf.loc[df['age'] > 25]

ผมสร้าง Boolean mask จากเงื่อนไข df['age'] > 25 แล้วใส่เข้า loc — pandas จะคืนเฉพาะแถวที่ age มากกว่า 25 กลับมาเป็น DataFrame ครับ เหมือน AutoFilter ใน Excel แต่เขียนใน code ได้เลย Bob, Charlie, David ผ่านเงื่อนไข Alice ไม่ผ่านเพราะอายุ 24

>_
df.loc[df['age'] > 25]

ผลลัพธ์ name age salary
1 Bob 30 60000
2 Charlie 28 55000
3 David 35 80000
ตัวอย่างที่ 2: เลือกแถวตามเงื่อนไข + เฉพาะบางคอลัมน์df.loc[df['salary'] >= 55000, ['name', 'salary']]

คราวนี้ผมเพิ่ม argument ที่สองให้ loc เพื่อเลือกเฉพาะคอลัมน์ name กับ salary ครับ แถวที่ salary ≥ 55000 มีแค่ Charlie, David และ Bob — ผลลัพธ์ออกมาเป็น DataFrame สองคอลัมน์ ไม่มี age ให้รก

>_
df.loc[df['salary'] >= 55000, ['name', 'salary']]

ผลลัพธ์ name salary
1 Bob 60000
2 Charlie 55000
3 David 80000
ตัวอย่างที่ 3: เลือกแถวด้วย label เดี่ยว (index เป็นชื่อ)df.loc['Bob']

ตัวอย่างนี้ผมใช้ index ที่เป็นชื่อคนครับ df.loc['Bob'] คืนทุก column ของแถว Bob กลับมาเป็น Series — ค่า index คือชื่อคอลัมน์ ค่า value คือข้อมูลในแถวนั้น ถ้าเปรียบกับ Excel ก็เหมือน VLOOKUP แบบหาชื่อแล้วดึงข้อมูลในแถวนั้นออกมาเลย

>_
df.loc['Bob']

ผลลัพธ์score 92
Name: Bob, dtype: int64
ตัวอย่างที่ 4: กรองด้วยหลายเงื่อนไขพร้อมกันdf.loc[(df['dept'] == 'IT') & (df['years'] >= 5)]

ผมรวมสองเงื่อนไขด้วย & (AND) ครับ ต้องใส่ () ครอบแต่ละเงื่อนไขด้วย มิฉะนั้น Python จะ error เพราะ operator precedence ผลลัพธ์คือแถวที่เป็น IT และมีประสบการณ์ 5 ปีขึ้นไป ถ้าอยากได้ OR ใช้ | แทนครับ

>_
df.loc[(df['dept'] == 'IT') & (df['years'] >= 5)]

ผลลัพธ์ dept salary years
1 IT 70000 5
3 IT 80000 7

FAQs

loc ต่างจาก iloc ยังไงครับ?+

ต่างกันที่ loc ใช้ label (ชื่อ index / ชื่อคอลัมน์) ส่วน iloc ใช้ตำแหน่งตัวเลข 0-based ครับ เช่น df.loc['Alice'] กับ df.iloc[0] อาจได้แถวเดียวกัน แต่ถ้าเราเรียงลำดับ DataFrame ใหม่ iloc[0] จะได้แถวอื่น ส่วน loc['Alice'] ยังได้ Alice อยู่เสมอ ผมเลยชอบ loc มากกว่าเพราะ predictable กว่าครับ

ทำไมต้องใส่วงเล็บ () ครอบเงื่อนไขตอนใช้ & หรือ | ใน loc?+

เพราะ Python มี operator precedence ครับ & และ | มี priority ต่ำกว่า == และ > ถ้าไม่ใส่ () Python จะตีความผิดและ throw error หรือได้ผลผิดพลาด ผมจำง่ายๆ ว่า 'แต่ละเงื่อนไขต้องมีวงเล็บครอบ' เช่น (df['a'] > 1) & (df['b'] == 'X') ครับ

loc กับการ assign ค่าใหม่ใช้ได้ไหม?+

ได้เลยครับ! df.loc[df['status'] == 'inactive', 'score'] = 0 จะ set ค่า score เป็น 0 ทุกแถวที่ status เป็น inactive ผมใช้แบบนี้บ่อยมากตอนต้องการแก้ไขข้อมูลบางส่วนโดยไม่กระทบแถวอื่น คล้ายกับใช้ IF + range ใน Excel แต่สะดวกกว่ามากครับ

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas loc จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas locSelection
Selection (3)
pandas iloc

iloc ใน pandas ผมใช้สำหรับเลือกแถวและคอลัมน์ด้วยตำแหน่งตัวเลข (0-based index) เหมือนการอ้างอิงเซลล์ใน Excel ด้วยเลขแถว-คอลัมน์ครับ ต่างจาก loc ตรงที่ iloc ไม่สนใจชื่อ index — ดูแค่ว่าอยู่ตำแหน่งที่เท่าไหร่เท่านั้น

pandas isin

isin ใน pandas ผมใช้เช็คว่าแต่ละค่าในคอลัมน์ตรงกับค่าใน list ที่กำหนดไหม คืนมาเป็น True/False ทีละแถว ถ้าใครเคย filter หลายค่าพร้อมกันใน Excel หรือเขียน OR หลายเงื่อนไขซ้อนๆ กัน ตัวนี้คือทางลัดที่สะอาดกว่ามากครับ

pandas query

query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน boolean mask ยาวๆ ให้ตาลาย เหมาะมากกับเงื่อนไขซับซ้อนหลายข้อที่อยากให้โค้ดสั้นและอ่านรู้เรื่องครับ

Transform (1)
pandas set_index

set_index ใน pandas ผมใช้สำหรับตั้งคอลัมน์ใดคอลัมน์หนึ่ง (หรือหลายคอลัมน์) ให้กลายเป็น index หลักของ DataFrame เหมือนกับการกำหนดคีย์หลักให้ตาราง เพื่อให้ค้นหาข้อมูลด้วย .loc[] ได้อย่างรวดเร็วและตรงจุดครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่