บทนำ
ใช้ fillna(value=constant) เติมค่าขาดหาย (NaN) ด้วยค่าคงที่ที่กำหนดเอง เหมาะสำหรับกรณีที่ทราบค่า default หรือ sentinel value
ตัวอย่างโค้ด
import pandas as pd
import numpy as np
df = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Lexus', 'Mustang', 'Bentley', 'Mustang'],
"Units": [100, 150, np.NaN, 80, np.NaN, np.NaN]
})
print("DataFrame ต้นทาง:")
print(df)
const_val = 200
# เติม NaN ในคอลัมน์ Units ด้วย 200
df['Units'].fillna(value=const_val, inplace=True)
print(f"\nDataFrame หลังเติม NaN ด้วย {const_val}:")
print(df)
ผลลัพธ์
DataFrame ต้นทาง:
Car Units
0 BMW 100.0
1 Lexus 150.0
2 Lexus NaN
3 Mustang 80.0
4 Bentley NaN
5 Mustang NaN
DataFrame หลังเติม NaN ด้วย 200:
Car Units
0 BMW 100.0
1 Lexus 150.0
2 Lexus 200.0
3 Mustang 80.0
4 Bentley 200.0
5 Mustang 200.0
วิธีการเติมค่าคงที่ต่างๆ
1. fillna(value=...) บน Series (คอลัมน์เดียว)
df['Units'].fillna(value=200, inplace=True)
# หรือ
df['Units'] = df['Units'].fillna(200)
2. fillna(value=...) บน DataFrame (หลายคอลัมน์ค่าเดียวกัน)
df.fillna(value=200, inplace=True) # เติมทุกคอลัมน์
3. fillna(value={col: val, ...}) ค่าแตกต่างต่อคอลัมน์
df.fillna(value={'Units': 200, 'Price': 0, 'Name': 'Unknown'}, inplace=True)
4. ใช้ Dictionary สำหรับคอลัมน์เฉพาะ
fill_values = {
'Units': 200,
'Price': 0,
'Category': 'Unknown'
}
df.fillna(value=fill_values, inplace=True)
กรณีใช้งานจริง
- Sentinel values: -1, 0, 9999 สำหรับ "ไม่มีข้อมูล"
- Business default: 0 สำหรับยอดขาย, 'Unknown' สำหรับ category
- Downstream compatibility: บางระบบไม่รองรับ NaN ต้องแปลงเป็นค่าจริง
ข้อควรระวัง
- การเติมค่าคงที่อาจนำ bias เข้ามา (เช่น เติม 0 ทำ mean ผิด)
- คอลัมน์ object/string: ใช้ string constant ('Unknown', 'N/A')
- คอลัมน์ datetime: ใช้ pd.NaT หรือ Timestamp เฉพาะ
- Boolean: ใช้ False หรือ True ตาม domain logic
สรุป
ใช้ df['col'].fillna(value=constant, inplace=True) หรือ df.fillna(value={col: val}) สำหรับหลายคอลัมน์ วิธีง่ายและชัดเจน แต่ควรพิจารณา impact ต่อการวิเคราะห์สถิติหลังเติมค่า