Thep Excel

pandas isin — เช็คว่าแต่ละค่าอยู่ใน list ที่กำหนดไหม

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

df['col'].isin(values)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df['col'].isin(values)

คืนค่า (Returns)
Series

คืนเป็น Series ของ True/False (boolean mask) ขนาดเท่าจำนวนแถวเดิม ตัวมันเองยังไม่ใช่ตารางที่กรองแล้วนะครับ ต้องเอาไปครอบ df[…] อีกชั้นถึงจะได้ DataFrame ที่ filter เสร็จ

Argument Type Required Default Description
values list | set | Series | dict Yes ชุดค่าที่ต้องการเทียบ ปกติผมใส่เป็น list เช่น [‘Bangkok’,’Phuket’] หรือ [10, 20, 30] แต่ละค่าในคอลัมน์จะถูกเช็คว่าอยู่ในชุดนี้ไหม

Examples

ตัวอย่างที่ 1: ได้ boolean mask (Series ของ True/False)
df['city'].isin(['Bangkok','Phuket'])
ผมเช็คคอลัมน์ city ว่าแต่ละแถวเป็น Bangkok หรือ Phuket ไหม ผลที่ได้คือ Series ของ True/False เรียงตามแถวเดิมเลยครับ แถวไหนเข้าเงื่อนไขได้ True ไม่เข้าได้ False ตัวนี้แหละที่เรียกว่า boolean mask
Python Code:

df['city'].isin(['Bangkok','Phuket'])

Result:

0 True
1 True
2 False
3 False
Name: city, dtype: bool

ตัวอย่างที่ 2: เอา mask ไปกรองแถว (ได้ DataFrame ที่ filter แล้ว)
df[df['city'].isin(['Bangkok','Phuket'])]
อันนี้คือท่าที่ผมใช้จริงบ่อยสุดครับ เอา mask จากตัวอย่างที่แล้วมาครอบ df[…] อีกที pandas จะเก็บไว้เฉพาะแถวที่เป็น True คือ Bangkok กับ Phuket ได้ DataFrame ที่กรองเสร็จออกมาเลย เหมือนกด Filter ใน Excel แล้วเลือกแค่ 2 เมืองนี้
Python Code:

df[df['city'].isin(['Bangkok','Phuket'])]

Result:

city sales
0 Bangkok 100
1 Phuket 200

ตัวอย่างที่ 3: กลับเงื่อนไขด้วย ~ (เอาที่ไม่อยู่ใน list)
df[~df['city'].isin(['Bangkok','Phuket'])]
บางทีผมอยากได้ตรงข้าม คือเอาแถวที่ไม่อยู่ใน list ก็เติม ~ (tilde) ไว้ข้างหน้าเพื่อพลิก True เป็น False คราวนี้เลยเหลือ Chiang Mai กับ Khon Kaen แทน เหมือน NOT IN ใน SQL ครับ
Python Code:

df[~df['city'].isin(['Bangkok','Phuket'])]

Result:

city sales
2 Chiang Mai 150
3 Khon Kaen 80

ตัวอย่างที่ 4: กรองด้วยค่าตัวเลขใน list
df[df['qty'].isin([10, 40])]
isin ใช้กับตัวเลขได้เหมือนกันครับ ผมกรองเอาเฉพาะแถวที่ qty เท่ากับ 10 หรือ 40 เหลือสินค้า A, C (qty 10) และ D (qty 40) ส่วน B ที่เป็น 25 ถูกตัดทิ้งเพราะไม่อยู่ใน list
Python Code:

df[df['qty'].isin([10, 40])]

Result:

product qty
0 A 10
2 C 10
3 D 40

FAQs

isin ต่างจากการเขียน OR หลายเงื่อนไข (==) ยังไง?

ผลลัพธ์เหมือนกันเป๊ะครับ แต่ isin อ่านง่ายกว่าและสั้นกว่ามากเมื่อค่ามีหลายตัว ลองนึกภาพถ้าต้องเช็ค 10 เมือง เขียน == ต่อด้วย | สิบรอบนี่ตาลายเลยครับ ส่วน isin แค่ใส่ list เข้าไปทีเดียวจบ แถมถ้าค่าที่จะเช็คเก็บอยู่ในตัวแปร list อยู่แล้ว ก็ส่งเข้า isin ได้ตรงๆ ไม่ต้องมานั่งต่อ string เงื่อนไขเอง

ทำไมโค้ด AI ชอบเขียน df[df['col'].isin([…])] ซ้อนกันสองชั้น?

เพราะ isin คืนมาแค่ Series ของ True/False (mask) ไม่ได้กรองตารางให้เองครับ ชั้นในคือ df[‘col’].isin([…]) สร้าง mask ส่วนชั้นนอก df[…] เอา mask นั้นไปบอก pandas ว่า “เก็บเฉพาะแถวที่ True” สองชั้นนี้เลยทำงานคนละหน้าที่กัน พอเข้าใจแล้วจะอ่านโค้ด pandas ออกเกือบหมดเลยครับ เพราะ pattern นี้ใช้กันทั่วไปมาก

ถ้าอยากเช็คหลายคอลัมน์พร้อมกันทำได้ไหม?

ทำได้ครับ ถ้าเรียก .isin() บนทั้ง DataFrame เช่น df.isin([10, 40]) มันจะเช็คทุกช่องทุกคอลัมน์แล้วคืน DataFrame ของ True/False ขนาดเท่าเดิมเลย แต่ในงานกรองแถวจริงๆ ผมมักเช็คทีละคอลัมน์อย่าง df[‘col’].isin([…]) มากกว่า เพราะคุมง่ายและตรงกับสิ่งที่อยากได้

Resources & Related

Additional Notes

ถ้าผมอ่านโค้ด pandas ที่ AI เขียนมา จะเจอ isin บ่อยมากครับ เพราะมันคือวิธีกรองข้อมูลด้วย “หลายค่า” ที่สั้นและอ่านง่ายที่สุด 😎

หน้าที่ของมันตรงไปตรงมา: เอาแต่ละค่าในคอลัมน์ไปเทียบกับ list ที่เราให้ ถ้าค่านั้นอยู่ใน list ก็ได้ True ถ้าไม่อยู่ก็ได้ False ผลที่ออกมาเลยเป็น Series ของ True/False เรียงตามแถวเดิม เราเรียกสิ่งนี้ว่า boolean mask ครับ

ที่เจ๋งคือ มันมาแทน OR ยาวๆ ได้เลย แทนที่จะเขียน (df[‘city’]==’Bangkok’) | (df[‘city’]==’Phuket’) | (df[‘city’]==’Chiang Mai’) เราเขียนแค่ df[‘city’].isin([‘Bangkok’,’Phuket’,’Chiang Mai’]) จบในบรรทัดเดียว อ่านรู้เรื่องกว่าเยอะ เทียบกับ Excel ก็เหมือนเรา filter เลือกหลาย item พร้อมกันในช่องเดียวนั่นแหละครับ

ส่วนตัวผมแทบไม่เคยใช้ isin เดี่ยวๆ หรอกครับ ส่วนใหญ่เอา mask ที่ได้ไปครอบ df[…] เพื่อกรองแถวจริงๆ เลย เดี๋ยวในตัวอย่างผมจะให้ดูทั้งสองแบบ — แบบได้ mask ดิบๆ กับแบบเอาไปกรองตาราง ✨

Leave a Reply

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