Missing Values
Missing Values
Section titled “Missing Values”ค่าที่หายไปคือปัญหาที่พบบ่อยที่สุดในข้อมูลจริง
pandas ใช้ NaN (Not a Number) เป็นตัวแทนของค่าว่าง
NaN, None, pd.NA — ค่าว่าง 3 แบบ
Section titled “NaN, None, pd.NA — ค่าว่าง 3 แบบ”import pandas as pdimport numpy as np
# NaN — ค่าว่างสำหรับ float (ใช้บ่อยสุด)print(np.nan) # nanprint(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())
# นับค่าว่างแต่ละ columnprint(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")- ตรวจจับ:
=ISBLANK(A1)หรือ=COUNTBLANK(A1:A100) - เติมค่า:
=IF(ISBLANK(A1), 0, A1) - ลบแถว: ใช้ Filter แล้ว delete ด้วยมือ
-- ตรวจจับSELECT * FROM t WHERE score IS NULL;SELECT COUNT(*) - COUNT(score) AS missing FROM t;-- เติมค่าSELECT COALESCE(score, 0) FROM t;-- ลบแถวDELETE FROM t WHERE score IS NULL;// C ไม่มี NaN สำหรับ int — ใช้ค่า sentinel เช่น -1#include <math.h>double score = NAN; // NaN สำหรับ doubleif (isnan(score)) printf("missing\n");