---
title: pandas drop — ลบคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame
url: https://www.thepexcel.com/functions/python/transform/pandas-drop/
type: function-explainer
program: Python
syntax: "df.drop(labels, axis, columns, index)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas drop — ลบคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame

> drop ใน pandas ผมใช้สำหรับตัดคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame โดยระบุชื่อเองโดยตรง เหมือน

## คำอธิบาย

drop ใน pandas ผมใช้สำหรับตัดคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame โดยระบุชื่อเองโดยตรง เหมือนการ "ลบคอลัมน์" ใน Excel แบบเลือกได้เป๊ะๆ ว่าจะเอาคอลัมน์ไหนออกครับ

## Syntax

```excel
df.drop(labels, axis, columns, index)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| labels | No | str \| list |  | ชื่อคอลัมน์หรือ index ของแถวที่จะลบ ใช้คู่กับ axis เพื่อบอกว่าลบแนวไหน แต่ผมแนะนำใช้ columns= หรือ index= แทน อ่านชัดกว่าครับ |
| axis | No | int \| str | 0 | 0 หรือ 'index' = ลบแถว, 1 หรือ 'columns' = ลบคอลัมน์ ใช้คู่กับ labels= เท่านั้น ถ้าใช้ columns= หรือ index= ไม่ต้องระบุ axis ครับ |
| columns | No | str \| list |  | ชื่อคอลัมน์ที่จะลบ บอกตรงๆ โดยไม่ต้องระบุ axis เลย เขียนสั้นกว่า เช่น columns='age' หรือ columns=['a','b'] ครับ |
| index | No | int \| str \| list |  | ชื่อหรือเลข index ของแถวที่จะลบโดยตรง เช่น index=0 ลบแถวแรก หรือ index=[1,3] ลบแถวที่ 1 และ 3 ครับ |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ลบคอลัมน์เดียว

```excel
df.drop(columns='age')
```

**ผลลัพธ์:** `      name  salary
0    Alice   50000
1      Bob   60000
2  Charlie   70000`

ผมลบคอลัมน์ age ออกจาก DataFrame โดยใช้ columns='age' ครับ ได้ DataFrame ใหม่ที่มีแค่ name กับ salary แล้ว เหมือนคลิกขวาลบคอลัมน์ใน Excel เลย ข้อมูลต้นฉบับ df ยังอยู่ครบไม่หายไปนะครับ

### 2. ตัวอย่างที่ 2: ลบหลายคอลัมน์พร้อมกัน

```excel
df.drop(columns=['age', 'dept'])
```

**ผลลัพธ์:** `   id     name  salary
0   1    Alice   50000
1   2      Bob   60000
2   3  Charlie   70000`

ใส่เป็น list ใน columns= ก็ลบได้หลายคอลัมน์พร้อมกันเลยครับ ผมใส่ ['age', 'dept'] ก็ได้ DataFrame ที่เหลือแค่ id, name, salary ออกมา สะดวกมากตอนมีหลายคอลัมน์ที่ไม่ต้องการ

### 3. ตัวอย่างที่ 3: ลบแถวตาม index

```excel
df.drop(index=[1, 3])
```

**ผลลัพธ์:** `      name  score
0    Alice     90
2  Charlie     80`

ผมลบแถวที่ index เป็น 1 และ 3 ออก เหลือแค่แถว Alice กับ Charlie ที่ score ดีอยู่ครับ วิธีนี้ใช้ได้เลยถ้าเรารู้ index ของแถวที่ไม่ต้องการ เหมือนการ Delete Row ใน Excel แบบระบุเลขแถวครับ

### 4. ตัวอย่างที่ 4: ลบคอลัมน์แล้ว save ผลไว้ใช้ต่อ

```excel
df.drop(columns='temp_col').reset_index(drop=True)
```

**ผลลัพธ์:** `    name  age  salary
0  Alice   25   50000
1    Bob   30   60000`

ผมชอบ chain ต่อหลัง drop ครับ ในตัวอย่างนี้ลบ temp_col แล้วต่อด้วย reset_index เพื่อ reset เลข index ให้เรียงใหม่ตั้งแต่ 0 ถ้าอยากเก็บผลไว้ใช้ต่อก็แค่ df_clean = df.drop(columns='temp_col') แล้วเอา df_clean ไปทำต่อได้เลยครับ

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

- 💡 ผมแนะนำให้ใช้ columns= หรือ index= แทน axis=0/1 เสมอครับ เพราะอ่านแล้วรู้ทันทีว่ากำลังลบอะไร ไม่ต้องนึกว่า axis=1 คืออะไรอีก

- ถ้าต้องการ drop แล้วเก็บไว้ใน DataFrame เดิมเลย ผมใช้ df = df.drop(columns='x') ครับ บางคนใช้ inplace=True แต่ pandas เริ่ม deprecate แล้ว เขียนแบบ assignment ชัดกว่าและปลอดภัยกว่า

- ตอนโหลดข้อมูลจาก Excel แล้วมีคอลัมน์ Unnamed ติดมา ผมใช้ df.drop(columns=[col for col in df.columns if 'Unnamed' in col]) เพื่อลบทีเดียวหมดเลยครับ ไม่ต้องระบุทีละชื่อ

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

**Q: drop กับ dropna ต่างกันยังไง?**

ต่างกันมากเลยครับ drop = เราระบุชื่อคอลัมน์หรือแถวที่อยากลบเองโดยตรง เช่น drop(columns='age') แบบนี้รู้เลยว่าจะเอาอะไรออก ส่วน dropna = ลบแถวที่มีค่า NaN (ค่าว่าง) อยู่โดยอัตโนมัติ ไม่ต้องระบุชื่อ แค่บอกว่า "ถ้าแถวไหนมีค่าว่าง ลบทิ้งเลย" สรุปคือ drop ใช้ตอนรู้ชื่อ dropna ใช้ตอนไล่ล่า NaN ครับ

**Q: ทำไมหลัง drop แล้ว df ยังมีคอลัมน์เดิมอยู่?**

เพราะ drop ไม่ได้แก้ df ต้นฉบับครับ มันคืน DataFrame ใหม่ให้เรา ผมเจอปัญหานี้บ่อยมากตอนเริ่มใช้ใหม่ๆ วิธีแก้คือเก็บผลลัพธ์ไว้ก่อน เช่น df_clean = df.drop(columns='age') แล้วค่อยใช้ df_clean ต่อ หรือถ้าอยากแทนที่ df ตรงๆ ก็ df = df.drop(columns='age') เลยก็ได้ครับ

**Q: ถ้าระบุชื่อคอลัมน์ที่ไม่มีอยู่จริง จะเกิดอะไรขึ้น?**

จะได้ KeyError ครับ pandas จะหยุดทำงานแล้วบอกว่าหาคอลัมน์นั้นไม่เจอ ถ้าไม่แน่ใจว่าคอลัมน์นั้นมีอยู่ไหม ผมแนะนำให้ตรวจด้วย df.columns ก่อน หรือถ้าอยากให้ข้ามไปเฉยๆ เมื่อไม่เจอ ก็ใส่ errors='ignore' เพิ่มเข้าไปได้ครับ เช่น df.drop(columns='maybe_col', errors='ignore')

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

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

---

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