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

Python Pandas - เติมค่า NaN ด้วย Backward Fill (bfill) ส่งค่าถัดไปมากลับ

เมธอด 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() (สั้นกว่าและชัดเจนกว่า)