Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - ลบแถวที่มีค่า Null ออกจาก Pandas DataFrame ด้วย dropna()

เมธอด dropna() ใช้สำหรับลบแถว (rows) หรือคอลัมน์ (columns) ที่มีค่า NaN (Not a Number / Missing Values) ออกจาก DataFrame เป็นวิธีพื้นฐานในการทำความสะอาดข้อมูล (Data Cleaning)

พารามิเตอร์สำคัญของ dropna()

พารามิเตอร์ค่าเริ่มต้นคำอธิบาย
axis0 (index/rows)0 = ลบแถว, 1 = ลบคอลัมน์
how'any''any' = ลบถ้ามี NaN อย่างน้อย 1 ตัว, 'all' = ลบถ้าทุกค่าเป็น NaN
threshNoneจำนวนค่าที่ไม่ใช่ NaN ขั้นต่ำที่ต้องมีเพื่อเก็บแถวไว้
subsetNoneรายชื่อคอลัมน์ที่จะตรวจสอบ NaN (เฉพาะคอลัมน์เหล่านี้)
inplaceFalseTrue = แก้ไข DataFrame เดิม, False = คืน DataFrame ใหม่

ตัวอย่างการใช้งาน

1. โหลดข้อมูลที่มี NaN

import pandas as pd

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\CarRecords.csv")
print("DataFrame:\n", dataFrame)
print("\nRows, Cols:", dataFrame.shape)

2. ลบแถวที่มี NaN (ค่าเริ่มต้น)

dataFrame = dataFrame.dropna()
print("\nDataFrame หลัง dropna():\n", dataFrame)
print("\nRows, Cols ใหม่:", dataFrame.shape)

3. ตัวอย่างพารามิเตอร์อื่นๆ

# ลบคอลัมน์ที่มี NaN
df.dropna(axis=1)

# ลบเฉพาะแถวที่ ทุกค่าเป็น NaN
df.dropna(how='all')

# เก็บแถวที่มีค่าที่ไม่ใช่ NaN อย่างน้อย 2 ค่า
df.dropna(thresh=2)

# ตรวจสอบ NaN เฉพาะคอลัมน์ UnitsSold
df.dropna(subset=['UnitsSold'])

โค้ดตัวอย่างสมบูรณ์

import pandas as pd

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\CarRecords.csv")
print("DataFrame:\n", dataFrame)
print("\nRows, Cols:", dataFrame.shape)

# ลบแถวที่มี NaN
dataFrame = dataFrame.dropna()
print("\nDataFrame หลังลบ NaN:\n", dataFrame)
print("\nRows, Cols ใหม่:", dataFrame.shape)

ผลลัพธ์

DataFrame:
        Car      Place  UnitsSold
0      Audi  Bangalore       80.0
1   Porsche     Mumbai      110.0
2  RollsRoyce      Pune        NaN
3      BMW     Delhi      200.0
4  Mercedes  Hyderabad       80.0
5  Lamborghini Chandigarh      NaN
6      Audi     Mumbai        NaN
7  Mercedes      Pune      120.0
8  Lamborghini   Delhi      100.0

Rows, Cols: (9, 3)

DataFrame หลังลบ NaN:
        Car      Place  UnitsSold
0      Audi  Bangalore       80.0
1   Porsche     Mumbai      110.0
3      BMW     Delhi      200.0
4  Mercedes  Hyderabad       80.0
7  Mercedes      Pune      120.0
8  Lamborghini   Delhi      100.0

Rows, Cols ใหม่: (6, 3)

แนวทางปฏิบัติที่ดี (Best Practices)

  • ตรวจสอบสัดส่วนข้อมูลที่หายไปก่อนตัดสินใจลบ (df.isnull().mean())
  • พิจารณา fillna() (Imputation) แทนการลบ ถ้าข้อมูลมีค่า
  • ใช้ subset เพื่อลบเฉพาะคอลัมน์สำคัญที่ห้ามมี NaN
  • เก็บ log ของแถวที่ถูกลบไว้เพื่อตรวจสอบภายหลัง