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

Python - ลบค่าที่หายไป (NaN) ออกจาก DataFrame ด้วย dropna()

เมธอด dropna() ใช้ลบแถวหรือคอลัมน์ที่มีค่า NaN (Missing Values) ออกจาก DataFrame เป็นขั้นตอนสำคัญใน Data Cleaning ก่อนทำการวิเคราะห์ต่อ

ขั้นตอนการทำงาน

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

import pandas as pd

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

2. ใช้ dropna() ลบแถวที่มี NaN

clean_df = dataFrame.dropna()
print("\nDataFrame after dropna():\n", clean_df)

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

import pandas as pd

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

# ลบแถวที่มี NaN
clean_df = dataFrame.dropna()
print("\nDataFrame after removing NaN values:\n", clean_df)

ผลลัพธ์

DataFrame with some NaN (missing) values:
        Car      Place  UnitsSold
0      Audi  Bangalore       80.0
1   Porsche     Mumbai        NaN
2  RollsRoyce      Pune      100.0
3      BMW     Delhi        NaN
4  Mercedes  Hyderabad       80.0
5  Lamborghini Chandigarh       80.0
6      Audi     Mumbai        NaN
7  Mercedes      Pune      120.0
8  Lamborghini   Delhi      100.0

Rows, Cols: (9, 3)

DataFrame after removing NaN values:
        Car      Place  UnitsSold
0      Audi  Bangalore       80.0
2  RollsRoyce      Pune      100.0
4  Mercedes  Hyderabad       80.0
5  Lamborghini Chandigarh       80.0
7  Mercedes      Pune      120.0
8  Lamborghini   Delhi      100.0

พารามิเตอร์สำคัญ (ซ้ำจากบทความก่อนแต่สรุปให้ครบ)

# ลบแถวที่มี NaN อย่างน้อย 1 ตัว (default)
df.dropna()

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

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

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

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

# แก้ไข DataFrame เดิม
df.dropna(inplace=True)

ตัวเลือกแทนการลบ: Imputation (เติมค่า)

# เติมด้วยค่าเฉลี่ย
df['col'].fillna(df['col'].mean())

# เติมด้วยค่ามัธยฐาน (robust กว่า)
df['col'].fillna(df['col'].median())

# Forward/Backward fill (time series)
df.fillna(method='ffill')
df.fillna(method='bfill')

# Interpolation
df.interpolate()

แนวทางเลือก

  • ลบ (dropna): ข้อมูลหายไปน้อย (<5%), ไม่มี pattern, ไม่สำคัญ
  • เติม (fillna/interpolate): ข้อมูลหายไปมาก, มี pattern, ต้องการเก็บ sample size
  • Model-based imputation: ใช้ ML ทำนายค่าหายไป (KNN, MICE, etc.)