เมธอด fillna(method='bfill') หรือ fillna(method='backfill') ใช้เติมค่า NaN ด้วยการ นำค่าจากแถวถัดไป (ด้านล่าง) มาเติมย้อนกลับ** เรียกว่า Backward Fill หรือ Backfill
ขั้นตอนการทำงาน
1. โหลดข้อมูลที่มี NaN
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesData.csv")
print("DataFrame:\n", dataFrame)
2. ใช้ fillna(method='bfill')
res = dataFrame.fillna(method='bfill')
print("\nDataFrame หลัง backward fill:\n", res)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesData.csv")
print("DataFrame:\n", dataFrame)
# Backward fill
res = dataFrame.fillna(method='bfill')
print("\nDataFrame หลัง backward fill:\n", res)
ผลลัพธ์
DataFrame:
Car Reg_Price Units
0 BMW 2500 100.0
1 Lexus 3500 NaN
2 Audi 2500 120.0
3 Jaguar 2000 NaN
4 Mustang 2500 110.0
DataFrame หลัง backward fill:
Car Reg_Price Units
0 BMW 2500 100.0
1 Lexus 3500 120.0
2 Audi 2500 120.0
3 Jaguar 2000 110.0
4 Mustang 2500 110.0
คำอธิบาย
- แถว 1 (Lexus): NaN → ใช้ค่าจากแถวถัดไป (Audi) = 120
- แถว 3 (Jaguar): NaN → ใช้ค่าจากแถวถัดไป (Mustang) = 110
- แถวสุดท้าย (Mustang): ไม่มีแถวถัดไป → ไม่เปลี่ยนแปลง (หากเป็น NaN จะคงเป็น NaN)
เปรียบเทียบ Forward vs Backward Fill
| เมธอด | ทิศทาง | ใช้ค่าจาก | เหมาะกับ |
|---|---|---|---|
ffill / pad | ไปข้างหน้า | แถวก่อนหน้า (ด้านบน) | Time-series, ข้อมูลต่อเนื่อง |
bfill / backfill | ย้อนกลับ | แถวถัดไป (ด้านล่าง) | ข้อมูลที่ค่าล่าสุดน่าเชื่อถือกว่า |
พารามิเตอร์เพิ่มเติม
# จำกัดจำนวนแถวที่เติมติดต่อกัน
df.fillna(method='bfill', limit=2)
# เติมเฉพาะคอลัมน์บางคอลัมน์
df[['Units']].fillna(method='bfill')
# ใช้กับ axis=1 (แนวนอน/คอลัมน์)
df.fillna(method='bfill', axis=1)
หมายเหตุ
fillna(method='bfill')ถูก deprecated ใน Pandas 2.1+ ควรใช้df.ffill()และdf.bfill()แทน- รูปแบบใหม่:
dataFrame.bfill()(สั้นกว่าและชัดเจนกว่า)