---
title: pandas fillna — เติมค่าที่หายไป (NaN) ใน DataFrame
url: https://www.thepexcel.com/functions/python/cleaning/pandas-fillna/
type: function-explainer
program: Python
syntax: df.fillna(value)
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> df.fillna() ใน pandas ผมใช้สำหรับเติมค่า NaN ที่หายไปใน DataFrame ด้วยค่าที่กำหนด เช่น 0, ค่าเฉลี่ย

## คำอธิบาย

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

## Syntax

```excel
df.fillna(value)
```

## Arguments

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

## ตัวอย่าง

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

```excel
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`

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

### 2. ตัวอย่างที่ 2: เติมต่างคอลัมน์ด้วย dict

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

**ผลลัพธ์:** `   score     city
0   85.0  Bangkok
1    0.0  Unknown
2   90.0   Phuket`

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

### 3. ตัวอย่างที่ 3: เติมด้วยค่าแถวก่อนหน้า (forward fill)

```excel
df.ffill()
```

**ผลลัพธ์:** `   temp
0  36.5
1  36.5
2  36.5
3  37.0
4  37.0`

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

## หมายเหตุเพิ่มเติม

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

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

## คำถามที่พบบ่อย

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [pandas.DataFrame.fillna — pandas official docs](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/cleaning/pandas-fillna/](https://www.thepexcel.com/functions/python/cleaning/pandas-fillna/)_
