เมธอด interpolate() ใช้เติมค่าที่หายไป (NaN) โดยการ ประมาณค่า (interpolation)** จากค่าที่รู้จักรอบข้าง วิธีเริ่มต้นคือ Linear Interpolation** (เส้นตรง) แต่รองรับวิธีอื่นๆ มากมาย
ขั้นตอนการทำงาน
1. โหลดข้อมูลที่มี NaN
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesData.csv")
print("DataFrame:\n", dataFrame)
2. ใช้ interpolate() เติมค่า NaN
res = dataFrame.interpolate()
print("\nDataFrame หลัง interpolation:\n", res)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesData.csv")
print("DataFrame:\n", dataFrame)
# เติม NaN ด้วย interpolation
res = dataFrame.interpolate()
print("\nDataFrame หลัง interpolation:\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 หลัง interpolation:
Car Reg_Price Units
0 BMW 2500 100.0
1 Lexus 3500 110.0
2 Audi 2500 120.0
3 Jaguar 2000 115.0
4 Mustang 2500 110.0
คำอธิบายผลลัพธ์
- แถว 1 (Lexus): NaN อยู่ระหว่าง 100 และ 120 → ประมาณเป็น 110 (กลาง)
- แถว 3 (Jaguar): NaN อยู่ระหว่าง 120 และ 110 → ประมาณเป็น 115 (กลาง)
- คอลัมน์ Car และ Reg_Price ไม่มี NaN จึงไม่เปลี่ยนแปลง
วิธี Interpolation อื่นๆ (method parameter)
| Method | คำอธิบาย |
|---|---|
'linear' | เส้นตรง (default) เหมาะกับ Time-series ที่มีช่วงเท่ากัน |
'time' | คำนวณจากเวลา (ต้องมี DatetimeIndex) |
'index' | ใช้ค่า index เป็นพิกัด |
'pad' / 'ffill' | Forward fill (ค่าก่อนหน้า) |
'bfill' | Backward fill (ค่าถัดไป) |
'nearest' | ใช้ค่าที่ใกล้ที่สุด |
'spline', 'polynomial' | โค้งเส้น (ต้องระบุ order) |
ตัวอย่างใช้ method อื่น
# Forward fill (ค่าก่อนหน้า)
df.fillna(method='ffill')
# Backward fill (ค่าถัดไป)
df.fillna(method='bfill')
# Time-based interpolation (ต้องมี datetime index)
df.set_index('date').interpolate(method='time')
⚠️ ข้อจำกัด
- ทำงานได้เฉพาะคอลัมน์ตัวเลข (numeric columns)
- ไม่สามารถประมาณค่า NaN ที่อยู่ขอบ (leading/trailing NaN) ด้วย linear method
- สำหรับขอบ ใช้
limit_direction='both'หรือ method='pad'/'bfill'