Skip to content

Missing Values

ค่าที่หายไปคือปัญหาที่พบบ่อยที่สุดในข้อมูลจริง pandas ใช้ NaN (Not a Number) เป็นตัวแทนของค่าว่าง

NaN, None, pd.NA — ค่าว่าง 3 แบบ

Section titled “NaN, None, pd.NA — ค่าว่าง 3 แบบ”
import pandas as pd
import numpy as np
# NaN — ค่าว่างสำหรับ float (ใช้บ่อยสุด)
print(np.nan) # nan
print(type(np.nan)) # <class 'float'>
# None — Python null (pandas แปลงเป็น NaN อัตโนมัติ)
s = pd.Series([1, None, 3])
print(s) # 0 1.0, 1 NaN, 2 3.0
# pd.NA — Nullable type (pandas 1.0+)
s = pd.Series([1, pd.NA, 3], dtype="Int64")
print(s) # 0 1, 1 <NA>, 2 3

ตรวจจับค่าว่าง

Section titled “ตรวจจับค่าว่าง”
df = pd.DataFrame({
"name": ["Alice", "Bob", None, "Diana"],
"score": [85, None, 70, None],
"grade": ["A", "B", "C", None]
})
# .isna() — True ถ้าเป็นค่าว่าง
print(df.isna())
# นับค่าว่างแต่ละ column
print(df.isna().sum())
# name 1
# score 2
# grade 1
# เปอร์เซ็นต์ค่าว่าง
print(df.isna().mean() * 100)

.fillna() — เติมค่าว่าง

Section titled “.fillna() — เติมค่าว่าง”
# เติมด้วยค่าเดียว
df["score"].fillna(0)
# เติมด้วยค่าเฉลี่ย
df["score"].fillna(df["score"].mean())
# เติมด้วย forward fill (ค่าก่อนหน้า)
df["grade"].ffill()
# เติมแต่ละ column ด้วยค่าต่างกัน
df.fillna({"score": 0, "grade": "N/A", "name": "Unknown"})

.dropna() — ลบแถวที่มีค่าว่าง

Section titled “.dropna() — ลบแถวที่มีค่าว่าง”
# ลบแถวที่มีค่าว่างใดๆ
df.dropna()
# ลบเฉพาะแถวที่ column เฉพาะเป็นค่าว่าง
df.dropna(subset=["name", "score"])
# ลบแถวที่ว่างทั้งหมด (ทุก column)
df.dropna(how="all")