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]]

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

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

คืนค่า (Returns)
DataFrame

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

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

Examples

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

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

Result:

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 ให้รก
Python Code:

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

Result:

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 แบบหาชื่อแล้วดึงข้อมูลในแถวนั้นออกมาเลย
Python Code:

df.loc['Bob']

Result:

score 92
Name: Bob, dtype: int64

ตัวอย่างที่ 4: กรองด้วยหลายเงื่อนไขพร้อมกัน
df.loc[(df['dept'] == 'IT') & (df['years'] >= 5)]
ผมรวมสองเงื่อนไขด้วย & (AND) ครับ ต้องใส่ () ครอบแต่ละเงื่อนไขด้วย มิฉะนั้น Python จะ error เพราะ operator precedence ผลลัพธ์คือแถวที่เป็น IT และมีประสบการณ์ 5 ปีขึ้นไป ถ้าอยากได้ OR ใช้ | แทนครับ
Python Code:

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

Result:

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

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 ที่อาจเพี้ยนได้ถ้าลำดับเปลี่ยน 😎

Leave a Reply

Your email address will not be published. Required fields are marked *