Thep Excel

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

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

>_
df.fillna(value)

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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 แทนครับ

Examples

ตัวอย่างที่ 1: เติม NaN ด้วยเลข 0df.fillna(0)

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

>_
df.fillna(0)

ผลลัพธ์ score name
0 85.0 Ana
1 0.0 Bob
2 90.0 Cara
3 0.0 Dan
4 75.0 Eva
ตัวอย่างที่ 2: เติมต่างคอลัมน์ด้วย dictdf.fillna({'score': 0, 'city': 'Unknown'})

คราวนี้ผมส่ง dict เพื่อกำหนดค่าเติมแต่ละคอลัมน์ต่างกันครับ score ที่หายไปเติม 0, city ที่หายไปเติม 'Unknown' จบในบรรทัดเดียวเลย

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

ผลลัพธ์ 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 ที่ค่าไม่น่าจะเปลี่ยนแบบกระทันหัน

>_
df.ffill()

ผลลัพธ์ 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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas fillna จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas fillnaCleaning
Cleaning (3)
pandas dropna

dropna ใน pandas ผมใช้สำหรับกำจัดแถวหรือคอลัมน์ที่มีค่า NaN ออกจาก DataFrame ครับ เหมาะมากสำหรับขั้นตอนทำความสะอาดข้อมูลก่อนวิเคราะห์ เพราะค่า NaN แฝงอยู่ในข้อมูลจริงแทบทุกชุด

pandas isna

isna ใน pandas ผมใช้สำหรับเช็คว่าแต่ละช่องใน DataFrame มีค่าว่าง (NaN) อยู่หรือเปล่า คืนผลเป็น True/False ทุกช่อง เหมือน ISBLANK ใน Excel เลยครับ แต่ทำได้กับทั้งตารางพร้อมกันในคำสั่งเดียว

pandas replace

replace ใน pandas ผมใช้สำหรับแทนที่ค่าหนึ่งด้วยอีกค่าหนึ่งทั้ง DataFrame หรือ Series เหมาะกับงาน cleaning ข้อมูล ใครเคยใช้ Find & Replace (Ctrl+H) ใน Excel มาก่อน บอกเลยว่าตัวนี้คือพี่น้องกันเลยครับ

Transform (2)
pandas astype

astype ใน pandas ผมใช้สำหรับแปลงประเภทข้อมูล (dtype) ของคอลัมน์หรือ DataFrame เช่น จาก object เป็น int หรือ float เป็น str ทำให้คำนวณได้ถูกต้องและประหยัด memory มากขึ้นครับ

pandas sort_values

df.sort_values() ใน pandas ผมใช้สำหรับเรียงลำดับแถวใน DataFrame ตามค่าของคอลัมน์ที่กำหนด เรียงจากน้อยไปมากหรือมากไปน้อยก็ได้ และยังเรียงตามหลายคอลัมน์พร้อมกันได้ด้วยครับ

Aggregation (1)
pandas describe

df.describe() ใน pandas ผมใช้สำหรับดูสถิติพื้นฐานของข้อมูลในทุกคอลัมน์พร้อมกันในคำสั่งเดียว ทั้ง count, mean, std, min, max และ percentile ช่วยให้เข้าใจภาพรวมของชุดข้อมูลได้เร็วมากก่อนเริ่มวิเคราะห์จริงครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่