Thep Excel

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

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

>_
df.drop(labels, axis, columns, index)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

คืน DataFrame ใหม่ที่ลบคอลัมน์หรือแถวที่ระบุออกแล้วครับ df ต้นฉบับไม่ถูกแตะ ต้องเก็บผลลัพธ์ไว้ในตัวแปรใหม่เอง สามารถ chain ต่อได้ทันที เช่น .drop(…).reset_index()

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

drop เป็นฟังก์ชันที่ผมใช้บ่อยมากตอนทำความสะอาดข้อมูลครับ หลักการคือบอกชื่อที่อยากลบ แล้วมันจะคืน DataFrame ใหม่ที่ไม่มีของชิ้นนั้นให้เราครับ

ใน pandas เราสามารถลบได้ 2 ทิศทาง:
– ลบ **คอลัมน์** → ใช้ `columns=’ชื่อ’` หรือ `axis=1`
– ลบ **แถว** → ใช้ `index=[เลขแถว]` หรือ `axis=0`

ผมแนะนำให้ใช้ `columns=` และ `index=` แทน `axis=` นะครับ อ่านง่ายกว่าและโอกาสสับสนน้อยกว่ามาก

ที่เจ๋งคือ drop ต่างจาก dropna ตรงที่ **เราระบุชื่อที่จะลบเองได้เลย** ไม่ต้องรอให้เป็น NaN drop = ลบตามชื่อที่สั่ง, dropna = ลบแถวที่มีค่าว่าง NaN อยู่ครับ 😎

ส่วนตัวผมใช้ drop บ่อยสุดตอนโหลดข้อมูลจาก Excel แล้วมีคอลัมน์ Unnamed หรือคอลัมน์ที่ไม่เกี่ยวข้องติดมาด้วย แค่ระบุชื่อแล้วสั่ง drop ก็เรียบร้อยครับ

Examples

ตัวอย่างที่ 1: ลบคอลัมน์เดียวdf.drop(columns='age')

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

>_
df.drop(columns='age')

ผลลัพธ์ name salary
0 Alice 50000
1 Bob 60000
2 Charlie 70000
ตัวอย่างที่ 2: ลบหลายคอลัมน์พร้อมกันdf.drop(columns=['age', 'dept'])

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

>_
df.drop(columns=['age', 'dept'])

ผลลัพธ์ id name salary
0 1 Alice 50000
1 2 Bob 60000
2 3 Charlie 70000
ตัวอย่างที่ 3: ลบแถวตาม indexdf.drop(index=[1, 3])

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

>_
df.drop(index=[1, 3])

ผลลัพธ์ name score
0 Alice 90
2 Charlie 80
ตัวอย่างที่ 4: ลบคอลัมน์แล้ว save ผลไว้ใช้ต่อdf.drop(columns='temp_col').reset_index(drop=True)

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

>_
df.drop(columns='temp_col').reset_index(drop=True)

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

FAQs

drop กับ dropna ต่างกันยังไง?+

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

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

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

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

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

Resources & Related

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

ฟังก์ชันนี้pandas dropTransform
Cleaning (2)
pandas drop_duplicates

drop_duplicates ใน pandas ผมใช้สำหรับลบแถวข้อมูลที่ซ้ำกันออกจาก DataFrame เหมือนกับปุ่ม Remove Duplicates ใน Excel เลยครับ แต่ยืดหยุ่นกว่าตรงที่เราเลือกได้ว่าจะดูซ้ำจากคอลัมน์ไหน และจะเก็บแถวแรกหรือแถวสุดท้ายไว้

pandas dropna

dropna ใน pandas ผมใช้สำหรับกำจัดแถวหรือคอลัมน์ที่มีค่า NaN ออกจาก DataFrame ครับ เหมาะมากสำหรับขั้นตอนทำความสะอาดข้อมูลก่อนวิเคราะห์ เพราะค่า NaN แฝงอยู่ในข้อมูลจริงแทบทุกชุด

Transform (2)
pandas rename

rename ใน pandas ผมใช้สำหรับเปลี่ยนชื่อคอลัมน์หรือ index ใน DataFrame โดยส่ง dict บอกว่า 'ชื่อเดิม' ควรกลายเป็น 'ชื่อใหม่' อะไร เหมือนการ Rename column header ใน Excel แต่ทำแบบโปรแกรมได้ครับ

pandas reset_index

reset_index ผมใช้สำหรับเปลี่ยน index ของ DataFrame กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ต index ใหม่เป็น 0, 1, 2, … ตามลำดับ — ส่วนใหญ่จะโผล่หลัง groupby ทุกครั้งที่อยากนำผลลัพธ์ไปใช้งานต่อครับ

Comments

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