Interpolate Missing
interpolate_missing · missing · number
2026-09-23
กำลังประมวลผล…
interpolate_missing · missing · number
2026-09-23
ข้อมูลที่เรียงตามเวลา เช่น อุณหภูมิรายชั่วโมงหรือยอดขายรายวัน ถ้ามีช่องว่างอยู่ตรงกลาง การเติมด้วยค่าเฉลี่ยทั้งคอลัมน์จะทำให้เส้นกราฟผิดรูป เทคนิคนี้เติมด้วยค่าที่อยู่ระหว่างจุดก่อนหน้าและจุดถัดไปตามสัดส่วนระยะห่าง ซึ่งใกล้ความจริงมากกว่า
limitfill_missing แบบค่าคงที่linear ใช้ระยะห่างของแถวเป็นน้ำหนัก ส่วน time ใช้ระยะห่างจริงของเวลาจากคอลัมน์ที่ระบุ ซึ่งต้องเรียงจากน้อยไปมากอย่างเคร่งครัดlimit จะถูกปล่อยไว้เหมือนเดิม| Parameter | Type | Default |
|---|---|---|
column | string | — |
method | linear | time | "linear" |
timeColumn | string | |
limit | number | 100 |
import json
def interpolate_missing(values, limit=100):
result = list(values)
index = 0
while index < len(result):
if result[index] is not None:
index += 1
continue
end = index
while end < len(result) and result[end] is None:
end += 1
before = result[index - 1] if index > 0 else None
after = result[end] if end < len(result) else None
if before is not None and after is not None and end - index <= limit:
span = end - (index - 1)
for offset, position in enumerate(range(index, end), start=1):
result[position] = before + (after - before) * offset / span
index = end
return result
values = [10, None, None, 40, None]
print(json.dumps(interpolate_missing(values), ensure_ascii=False))
คอลัมน์ temperature บันทึกทุกชั่วโมงแต่มีช่องว่างสองถึงสามชั่วโมงจากเซ็นเซอร์ขัดข้อง เลือกโหมด time พร้อมคอลัมน์เวลา ตั้ง limit เป็น 3 เพื่อไม่ให้เติมข้ามช่วงที่ขาดยาว จากนั้นใช้ flag_missing ก่อน ขั้นตอนนี้ เพื่อให้ยังรู้ภายหลังว่าค่าไหนเป็นค่าที่เติมเข้าไป ไม่ใช่ค่าที่วัดได้จริง
ใช้ flag_missing ก่อนเสมอเมื่อต้องรายงานว่าข้อมูลใดถูกเติม ใช้ sort_rows เพื่อจัดลำดับให้ถูกต้องก่อน และใช้ fill_missing เมื่อข้อมูลไม่ได้ต่อเนื่องตามลำดับ