---
title: pandas nunique — นับจำนวนค่าที่ไม่ซ้ำกัน (distinct count)
url: https://www.thepexcel.com/functions/python/aggregation/pandas-nunique/
type: function-explainer
program: Python
syntax: "df.nunique(axis, dropna)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 2
  usefulness: 5
---

# pandas nunique — นับจำนวนค่าที่ไม่ซ้ำกัน (distinct count)

> nunique ใน pandas ผมใช้นับว่าในแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว เหมือนกับการ Remove Duplicates ใน

## คำอธิบาย

nunique ใน pandas ผมใช้นับว่าในแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว เหมือนกับการ Remove Duplicates ใน Excel แล้วนับจำนวนที่เหลือ หรือนับ unique ด้วย COUNTA นั่นแหละครับ เหมาะมากตอนอยากรู้ว่าข้อมูลมีกี่ลูกค้า กี่จังหวัด หรือกี่ประเภท

## Syntax

```excel
df.nunique(axis, dropna)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| axis | No | int \| str | 0 | แกนที่จะนับ ค่า default คือ 0 (นับลงในแต่ละคอลัมน์ = ได้ distinct count ต่อคอลัมน์) ถ้าใส่ 1 จะนับในแต่ละแถวแทน ส่วนใหญ่ผมใช้ 0 ตามค่า default ครับ |
| dropna | No | bool | True | จะไม่นับค่าว่าง (NaN) เป็นค่าหนึ่งไหม ค่า default คือ True (ไม่นับ NaN) ถ้าอยากให้ NaN ถูกนับเป็นหนึ่งค่าที่ไม่ซ้ำ ให้ตั้ง dropna=False ครับ |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: นับค่าที่ไม่ซ้ำของทุกคอลัมน์ใน DataFrame

```excel
df.nunique()
```

**ผลลัพธ์:** `city       3
product    2
sales      4
dtype: int64`

ผมเรียก df.nunique() ครั้งเดียว มันไล่นับให้ทุกคอลัมน์เลยครับ คอลัมน์ city มี 3 ค่าที่ไม่ซ้ำ (Bangkok, Chiang Mai, Phuket), product มี 2 (A, B) ส่วน sales มี 4 เพราะ 100 ซ้ำกันสองครั้ง ได้ผลออกมาเป็น Series ที่บอก distinct count ของแต่ละคอลัมน์ทีเดียวจบ

### 2. ตัวอย่างที่ 2: นับค่าที่ไม่ซ้ำของคอลัมน์เดียว

```excel
df['city'].nunique()
```

**ผลลัพธ์:** `3`

ถ้าผมสนใจแค่คอลัมน์เดียว ก็เลือกคอลัมน์นั้นออกมาก่อนแล้วค่อย .nunique() ครับ คราวนี้นับเฉพาะ city ได้เป็นตัวเลข 3 ตรงๆ (Bangkok, Chiang Mai, Phuket) เหมือนถาม 'มีกี่จังหวัดในข้อมูลนี้' แล้วได้คำตอบเดียว

### 3. ตัวอย่างที่ 3: จัดการค่าว่าง (NaN) ด้วย dropna

```excel
df['grade'].nunique(dropna=False)
```

**ผลลัพธ์:** `4`

โดย default nunique จะไม่นับ NaN ครับ — คอลัมน์ grade นี้ถ้านับปกติจะได้ 3 (A, B, C) แต่พอผมใส่ dropna=False มันจะนับ NaN เป็นอีกหนึ่งค่าที่ไม่ซ้ำด้วย เลยได้ 4 เอาไว้ใช้ตอนอยากรู้ว่ามี 'ช่องว่าง' ปนอยู่ในข้อมูลไหมครับ

### 4. ตัวอย่างที่ 4: นับค่าที่ไม่ซ้ำตามแนวแถวด้วย axis=1

```excel
df.nunique(axis=1)
```

**ผลลัพธ์:** `0    2
1    2
2    2
dtype: int64`

ปกติ nunique นับลงในแต่ละคอลัมน์ แต่ถ้าผมใส่ axis=1 มันจะนับในแต่ละแถวแทนครับ เช่น แถวแรก ['A','A','B'] มีค่าไม่ซ้ำ 2 ตัว, แถวสอง ['B','C','C'] มี 2 ตัว, แถวสาม ['A','B','A'] มี 2 ตัว มีประโยชน์ตอนอยากเช็คว่าแต่ละแถวตอบหลากหลายแค่ไหนครับ

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

- 💡 ผมใช้ df.nunique() เป็นคำสั่งเช็คสุขภาพข้อมูลคำสั่งแรกๆ เลยครับ — ถ้าคอลัมน์ที่ควรเป็นรหัสไม่ซ้ำ (เช่น เลขบัตร, order id) มี nunique น้อยกว่าจำนวนแถว df.shape[0] แสดงว่ามีข้อมูลซ้ำซ่อนอยู่ ต้องไปไล่ดู

- อยากนับ unique ทั้ง DataFrame แบบรวมทุกคอลัมน์เป็นตัวเลขเดียว ใช้ nunique ตรงๆ ไม่ได้ครับ ต้องเขียน len(df.drop_duplicates()) แทน ส่วน nunique จะแยกนับให้ทีละคอลัมน์เสมอ อย่าสับสนสองอันนี้นะครับ

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

**Q: nunique กับ count ต่างกันยังไง?**

ต่างกันชัดเจนครับ count นับ 'จำนวนค่าที่ไม่ใช่ค่าว่าง' ทั้งหมด (รวมตัวที่ซ้ำด้วย) ส่วน nunique นับเฉพาะ 'ค่าที่ไม่ซ้ำกัน' เช่น คอลัมน์ ['A','A','B'] count จะได้ 3 แต่ nunique จะได้ 2 ครับ เวลาผมอยากรู้ว่ามีกี่ประเภท/กี่รายชื่อจริงๆ ผมใช้ nunique เสมอ

**Q: ถ้าอยากรู้ว่าแต่ละค่าซ้ำกันกี่ครั้งด้วยล่ะ?**

nunique บอกแค่ 'จำนวน' ค่าที่ไม่ซ้ำครับ ถ้าอยากเห็นว่าแต่ละค่าเป็นอะไรและซ้ำกี่ครั้ง ให้ใช้ value_counts() แทน มันจะคืนรายการค่าพร้อมจำนวนนับให้เลย ส่วนตัวผมมักเริ่มจาก nunique เพื่อดูภาพรวมก่อน แล้วค่อยเจาะด้วย value_counts ครับ

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

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

---

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