Thep Excel

pandas fillna — เติมค่าที่หายไป (NaN) ใน DataFrame

df.fillna() ใน pandas ผมใช้สำหรับเติมค่า NaN ที่หายไปใน DataFrame ด้วยค่าที่กำหนด เช่น 0, ค่าเฉลี่ย หรือค่าจากแถวก่อนหน้า เป็นขั้นตอนสำคัญในการทำความสะอาดข้อมูลก่อนวิเคราะห์หรือส่งเข้า model ครับ

df.fillna(value)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.fillna(value)

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ใหม่ที่เติมค่า NaN แล้วครับ DataFrame ต้นฉบับไม่เปลี่ยน (เว้นแต่ใส่ inplace=True) ผมแนะนำให้เก็บในตัวแปรใหม่เสมอ เช่น df_clean = df.fillna(0)

Argument Type Required Default Description
value scalar | dict | Series | DataFrame Yes ค่าที่จะใช้เติมแทน NaN เช่น 0, ‘Unknown’, หรือ dict เช่น {‘col1’: 0, ‘col2’: ‘N/A’} สำหรับกำหนดต่างคอลัมน์
method str | None Optional None วิธีเติม: ‘ffill’ (forward fill — ใช้ค่าแถวก่อนหน้า) หรือ ‘bfill’ (backward fill — ใช้ค่าแถวถัดไป) แทน value
inplace bool Optional False ถ้า True จะแก้ไข DataFrame ต้นฉบับเลย ไม่คืน DataFrame ใหม่ ผมแนะนำให้ใช้ False แล้วเก็บผลลัพธ์ในตัวแปรใหม่ครับ
limit int | None Optional None จำกัดจำนวนแถว NaN ติดกันที่จะเติม เช่น limit=1 เติมได้แค่ 1 NaN ต่อกัน ใช้คู่กับ method

Examples

ตัวอย่างที่ 1: เติม NaN ด้วยเลข 0
df.fillna(0)
ผมเติม NaN ในคอลัมน์ score ด้วย 0 ครับ ง่ายที่สุดเมื่อค่า 0 มีความหมายในบริบทนั้น เช่น คะแนนที่ขาดส่งถือว่าได้ 0
Python Code:

df.fillna(0)

Result:

score name
0 85.0 Ana
1 0.0 Bob
2 90.0 Cara
3 0.0 Dan
4 75.0 Eva

ตัวอย่างที่ 2: เติมต่างคอลัมน์ด้วย dict
df.fillna({'score': 0, 'city': 'Unknown'})
คราวนี้ผมส่ง dict เพื่อกำหนดค่าเติมแต่ละคอลัมน์ต่างกันครับ score ที่หายไปเติม 0, city ที่หายไปเติม 'Unknown' จบในบรรทัดเดียวเลย
Python Code:

df.fillna({'score': 0, 'city': 'Unknown'})

Result:

score city
0 85.0 Bangkok
1 0.0 Unknown
2 90.0 Phuket

ตัวอย่างที่ 3: เติมด้วยค่าแถวก่อนหน้า (forward fill)
df.ffill()
ใช้ df.ffill() เพื่อเติม NaN ด้วยค่าจากแถวก่อนหน้าครับ (pandas 3.x ใช้ .ffill() แทน fillna(method='ffill') แล้ว) NaN ตัวที่ 2 และ 3 จะกลายเป็น 36.5 เหมือนแถวบน เหมาะกับข้อมูล time series ที่ค่าไม่น่าจะเปลี่ยนแบบกระทันหัน
Python Code:

df.ffill()

Result:

temp
0 36.5
1 36.5
2 36.5
3 37.0
4 37.0

FAQs

fillna แล้ว DataFrame ต้นฉบับเปลี่ยนด้วยไหม?

ไม่เปลี่ยนครับถ้าไม่ได้ใส่ inplace=True ผลลัพธ์จะเป็น DataFrame ใหม่ ต้องรับด้วยตัวแปร เช่น df_clean = df.fillna(0) ผมแนะนำให้ทำแบบนี้เสมอเพื่อเก็บข้อมูลต้นฉบับไว้ตรวจสอบ

จะเติมด้วยค่าเฉลี่ยของแต่ละคอลัมน์ทำยังไง?

ใช้ df.fillna(df.mean()) ได้เลยครับ pandas จะคำนวณ mean ของแต่ละคอลัมน์แล้วเติม NaN ในคอลัมน์นั้นอัตโนมัติ ผมใช้วิธีนี้บ่อยสำหรับข้อมูลตัวเลขที่ไม่ต้องการ bias จากการเติม 0

Resources & Related

Additional Notes

df.fillna() คือเครื่องมือทำความสะอาดข้อมูลที่ผมใช้บ่อยที่สุดตัวหนึ่งเลยครับ 😎

ฟังก์ชันนี้แทนค่า NaN (Not a Number — ค่าที่หายไปใน pandas) ด้วยค่าที่เรากำหนด ไม่ว่าจะเป็นตัวเลขคงที่ เช่น 0 หรือ ‘Unknown’, ค่าที่คำนวณได้เช่น mean, หรือค่าจากแถวติดกัน (forward fill / backward fill) และทำงานได้ทั้งระดับ DataFrame ทั้งก้อนหรือระบุรายคอลัมน์ก็ได้

ที่เจ๋งคือส่ง dict เข้าไปเพื่อกำหนดค่าเติมแต่ละคอลัมน์ต่างกันได้ในคำสั่งเดียว เช่น {‘age’: 0, ‘city’: ‘Unknown’} ประหยัดการเขียน fillna หลายรอบมากครับ ✨

ส่วนตัวผมมักเช็คก่อนเสมอด้วย df.isnull().sum() เพื่อรู้ว่าคอลัมน์ไหนมี NaN กี่ค่า แล้วค่อยตัดสินใจว่าจะเติมอะไร บางทีเติม 0 ไม่เหมาะ ควรเติม mean หรือ median แทนครับ

Leave a Reply

Your email address will not be published. Required fields are marked *