Thep Excel

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

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

>_
df['col'].isin(values)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าSeries

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

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

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 ดิบๆ กับแบบเอาไปกรองตาราง ✨

Examples

ตัวอย่างที่ 1: ได้ boolean mask (Series ของ True/False)df['city'].isin(['Bangkok','Phuket'])

ผมเช็คคอลัมน์ city ว่าแต่ละแถวเป็น Bangkok หรือ Phuket ไหม ผลที่ได้คือ Series ของ True/False เรียงตามแถวเดิมเลยครับ แถวไหนเข้าเงื่อนไขได้ True ไม่เข้าได้ False ตัวนี้แหละที่เรียกว่า boolean mask

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

ผลลัพธ์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 เมืองนี้

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

ผลลัพธ์ 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 ครับ

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

ผลลัพธ์ city sales
2 Chiang Mai 150
3 Khon Kaen 80
ตัวอย่างที่ 4: กรองด้วยค่าตัวเลขใน listdf[df['qty'].isin([10, 40])]

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

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

ผลลัพธ์ 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

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

ฟังก์ชันนี้pandas isinSelection
Logic (2)
numpy where

numpy.where ผมใช้เลือกค่าจาก array ตามเงื่อนไขที่กำหนดครับ ถ้าให้เทียบง่ายๆ มันคือ IF ใน Excel นั่นแหละ แต่เก่งกว่าตรงที่ทำงานกับข้อมูลทั้ง array พร้อมกันในทีเดียว แถมยังใส่อาร์กิวเมนต์เดียวเพื่อหา index ที่ตรงเงื่อนไขได้อีกด้วย

pandas between

between ใน pandas ผมใช้เช็คว่าค่าในคอลัมน์อยู่ในช่วง [left, right] หรือเปล่า คืนออกมาเป็น Series ของ True/False (เรียกว่า boolean mask) เอาไปกรองแถวต่อได้เลย ถ้าใครเคยเขียนเงื่อนไขใน Excel แบบ ยอด >= 100 AND <= 500 ตัวนี้คือคำสั่งสั้นๆ ที่ทำแบบนั้นให้ในบรรทัดเดียวครับ

Selection (2)
pandas loc

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

pandas query

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

Comments

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