---
title: pandas isin — เช็คว่าแต่ละค่าอยู่ใน list ที่กำหนดไหม
url: https://www.thepexcel.com/functions/python/selection/pandas-isin/
type: function-explainer
program: Python
syntax: "df['col'].isin(values)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> isin ใน pandas ผมใช้เช็คว่าแต่ละค่าในคอลัมน์ตรงกับค่าใน list ที่กำหนดไหม คืนมาเป็น True/False ทีละแถ

## คำอธิบาย

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

## Syntax

```excel
df['col'].isin(values)
```

## Arguments

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ได้ boolean mask (Series ของ True/False)

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

**ผลลัพธ์:** `0     True
1     True
2    False
3    False
Name: city, dtype: bool`

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

### 2. ตัวอย่างที่ 2: เอา mask ไปกรองแถว (ได้ DataFrame ที่ filter แล้ว)

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

**ผลลัพธ์:** `      city  sales
0  Bangkok    100
1   Phuket    200`

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

### 3. ตัวอย่างที่ 3: กลับเงื่อนไขด้วย ~ (เอาที่ไม่อยู่ใน list)

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

**ผลลัพธ์:** `         city  sales
2  Chiang Mai    150
3   Khon Kaen     80`

บางทีผมอยากได้ตรงข้าม คือเอาแถวที่ไม่อยู่ใน list ก็เติม ~ (tilde) ไว้ข้างหน้าเพื่อพลิก True เป็น False คราวนี้เลยเหลือ Chiang Mai กับ Khon Kaen แทน เหมือน NOT IN ใน SQL ครับ

### 4. ตัวอย่างที่ 4: กรองด้วยค่าตัวเลขใน list

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

**ผลลัพธ์:** `  product  qty
0       A   10
2       C   10
3       D   40`

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

## หมายเหตุเพิ่มเติม

- 💡 isin คืนแค่ mask (True/False) ไม่ได้กรองตารางให้ ถ้าอยากได้แถวจริงต้องครอบด้วย df[...] อีกชั้นเสมอ เช่น df[df['col'].isin([...])] ผมเห็นมือใหม่หลายคนงงตรงนี้บ่อย

- ใส่ ~ ไว้หน้าเงื่อนไขเพื่อพลิกเป็น "ไม่อยู่ใน list" ได้เลยครับ เช่น df[~df['col'].isin([...])] เทียบเท่า NOT IN ใน SQL ไม่ต้องไปเขียนเงื่อนไขกลับด้านเอง

- ค่าใน list ต้องชนิดตรงกับในคอลัมน์ด้วยนะครับ ถ้าคอลัมน์เก็บเลขเป็นตัวเลข (int) แต่เราใส่ '10' เป็น string ใน list มันจะ match ไม่เจอ แล้วได้ False หมด เจอปัญหานี้ลองเช็ค dtype ก่อน

## คำถามที่พบบ่อย

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [pandas.DataFrame.isin (official docs)](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isin.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/selection/pandas-isin/](https://www.thepexcel.com/functions/python/selection/pandas-isin/)_
