---
title: pandas query — กรองข้อมูล DataFrame ด้วยนิพจน์ภาษาธรรมชาติ
url: https://www.thepexcel.com/functions/python/selection/pandas-query/
type: function-explainer
program: Python
syntax: df.query(expr)
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas query — กรองข้อมูล DataFrame ด้วยนิพจน์ภาษาธรรมชาติ

> query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน

## คำอธิบาย

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

## Syntax

```excel
df.query(expr)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| expr | Yes | str |  | นิพจน์เงื่อนไขในรูปแบบ string เช่น 'score > 70' หรือ 'dept == "IT" and score >= 80' ใช้ and/or/not สำหรับเงื่อนไขหลายข้อ |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: กรองด้วยเงื่อนไขเดียว

```excel
df.query('score > 70')
```

**ผลลัพธ์:** `    name  score
0  Alice     85
2  Carol     92
3   Dave     75`

ผมกรองเอาเฉพาะแถวที่ score มากกว่า 70 ครับ ผลที่ได้คือ Alice (85), Carol (92) และ Dave (75) ส่วน Bob ที่ได้ 60 ก็หลุดออกไป เขียนเงื่อนไขเป็นข้อความตรงๆ อ่านง่ายกว่าเยอะ

### 2. ตัวอย่างที่ 2: กรองด้วยหลายเงื่อนไข and/or

```excel
df.query('dept == "IT" and score >= 80')
```

**ผลลัพธ์:** `    name dept  score
0  Alice   IT     85
2  Carol   IT     92`

คราวนี้ผมใช้ and เชื่อมสองเงื่อนไข กรองเอาคนที่อยู่แผนก IT และคะแนนตั้งแต่ 80 ขึ้นไป ได้ Alice กับ Carol ครับ สังเกตว่า Eve อยู่ IT ก็จริง แต่คะแนนแค่ 55 เลยตกเงื่อนไขไป เห็นไหมครับว่าอ่านง่ายกว่าใส่ & กับวงเล็บเยอะ

### 3. ตัวอย่างที่ 3: ใช้ตัวแปรภายนอกด้วย @

```excel
df.query('score >= @min_score')
```

**ผลลัพธ์:** `    name  score
0  Alice     85
2  Carol     92
3   Dave     75`

ทริคที่ผมใช้บ่อยคือใส่ @min_score เพื่อดึงค่าจากตัวแปร min_score ที่ตั้งไว้นอก DataFrame เข้ามาในเงื่อนไข พอ min_score = 70 ก็เลยได้ Alice, Carol, Dave เหมือนเดิม ข้อดีคือถ้าจะเปลี่ยนเกณฑ์ ก็แก้แค่ตัวแปรตัวเดียว ไม่ต้องไปไล่แก้ string ใน query ครับ

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

- 💡 ยิ่งเงื่อนไขเยอะ query ยิ่งคุ้มครับ เพราะใช้ and/or แทน & | ที่ต้องคอยระวังลำดับการคำนวณกับวงเล็บ อ่านโค้ดแล้วเข้าใจทันทีว่ากรองอะไรบ้าง

- ค่าที่เปลี่ยนบ่อยอย่าง threshold จาก config ผมแนะนำให้ใช้ @variable แทนการ hardcode ลงไปใน string ครับ โค้ดจะยืดหยุ่นและเอาไปเทสต์ง่ายกว่าเยอะ

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

**Q: query ช้ากว่าหรือเร็วกว่า boolean indexing?**

ขึ้นกับขนาดข้อมูลครับ ถ้า DataFrame เล็ก (ต่ำกว่าหมื่นแถว) query อาจช้ากว่านิดหน่อยเพราะต้องเสียเวลาแปลง string เป็นโค้ดก่อน แต่พอข้อมูลใหญ่และเงื่อนไขซับซ้อน query กลับเร็วกว่าได้ เพราะเบื้องหลังมันใช้ numexpr ช่วยประมวลผล ส่วนตัวผมเลยไม่กังวลเรื่องความเร็วตอนทำงานข้อมูลก้อนใหญ่ครับ

**Q: ชื่อคอลัมน์ที่มีช่องว่างหรืออักขระพิเศษใช้กับ query ได้ไหม?**

ได้ครับ แค่ครอบชื่อคอลัมน์ด้วย backtick เช่น df.query('`first name` == "Alice"') แค่นี้ pandas ก็จัดการให้ถูกต้องเอง ไม่ต้องไปเปลี่ยนชื่อคอลัมน์ให้ยุ่งยาก

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

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

---

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