---
title: numpy unique — หาค่าที่ไม่ซ้ำใน array แบบเดียวกับ UNIQUE ของ Excel
url: https://www.thepexcel.com/functions/python/transform/numpy-unique/
type: function-explainer
program: Python
syntax: "np.unique(ar, return_index, return_inverse, return_counts)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# numpy unique — หาค่าที่ไม่ซ้ำใน array แบบเดียวกับ UNIQUE ของ Excel

> np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน

## คำอธิบาย

np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True

## Syntax

```excel
np.unique(ar, return_index, return_inverse, return_counts)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| ar | Yes | array_like |  | array input ที่ต้องการหาค่า unique — ถ้าไม่ใช่ ndarray จะ flatten ให้อัตโนมัติก่อนประมวลผล |
| return_index | No | bool | False | ถ้า True จะคืน tuple เพิ่ม array ของ index ตำแหน่งที่เจอค่า unique แต่ละตัวครั้งแรกใน ar |
| return_inverse | No | bool | False | ถ้า True จะคืน tuple เพิ่ม array ที่ map ตำแหน่งใน ar กลับไปยัง index ใน unique array ใช้สร้าง ar คืนจาก unique ได้ |
| return_counts | No | bool | False | ถ้า True จะคืน tuple เพิ่ม array นับว่าค่า unique แต่ละตัวปรากฏกี่ครั้งใน ar — เหมือน COUNTIF ของ Excel |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: หาค่าที่ไม่ซ้ำจาก array ตัวเลข (แบบ UNIQUE ใน Excel)

```excel
np.unique(arr)
```

**ผลลัพธ์:** `[1 2 3 4 5 6 9]`

ผมส่ง array ที่มีค่าซ้ำกันหลายตัวเข้าไป ได้ค่า unique กลับมาเรียงจากน้อยไปมากเลยครับ เหมือนพิมพ์ =UNIQUE(A1:A11) ใน Excel 365 — ค่า 1, 3, 5 ที่ซ้ำกันจะเหลือแค่ตัวเดียว และ array ถูกเรียงให้อัตโนมัติ

### 2. ตัวอย่างที่ 2: หาค่า unique พร้อมนับความถี่ (เหมือน UNIQUE + COUNTIF รวมกัน)

```excel
counts
```

**ผลลัพธ์:** `[2 1 2 1 3 1 1]`

เมื่อใส่ return_counts=True ฟังก์ชันจะคืน tuple สองตัว ผม unpack เป็น unique_vals กับ counts ครับ counts ที่ได้คือจำนวนครั้งที่ค่า unique แต่ละตัวปรากฏ เช่น 5 ปรากฏ 3 ครั้ง ใช้ทำ frequency table แทน COUNTIF ใน Excel ได้เลย

### 3. ตัวอย่างที่ 3: หาค่า unique จาก array ข้อความ (ชื่อประเภทสินค้า)

```excel
np.unique(categories)
```

**ผลลัพธ์:** `['ปลา' 'หมู' 'ไก่']`

np.unique ใช้กับ string ได้ด้วยครับ ผมส่งชื่อประเภทสินค้าที่ซ้ำๆ เข้าไป ได้ชื่อไม่ซ้ำเรียง A–Z กลับมา ใช้ดูว่าข้อมูล category มีค่าอะไรบ้างก่อน process ต่อ — ขั้นตอน data exploration ที่ผมทำเป็นประจำครับ

### 4. ตัวอย่างที่ 4: ดูจำนวนค่า unique (ใช้ len เพื่อนับ)

```excel
len(np.unique(scores))
```

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

ผมครอบด้วย len() เพื่อนับว่ามีคะแนนกี่ระดับที่แตกต่างกัน ใช้บ่อยตอนอยากรู้ cardinality ของคอลัมน์ก่อนวางแผน visualization ครับ แบบเดียวกับ COUNTA(UNIQUE(range)) ใน Excel

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

- ผมแนะนำให้ใช้ np.unique ตอนทำ data exploration เพื่อดูว่า column มีค่าอะไรบ้าง แต่ถ้า data อยู่ใน DataFrame แล้วและอยากเห็นผลพร้อม percentage ด้วย ให้ใช้ df['col'].value_counts(normalize=True) แทนจะสะดวกกว่าครับ

- ส่วนตัวผมใช้ pattern นี้บ่อยมากตอน data cleaning: unique_vals, counts = np.unique(arr, return_counts=True) แล้ว zip(unique_vals, counts) เพื่อสร้าง dict ดูความถี่ได้ทันที — เร็วกว่าเปิด pandas สำหรับ quick check ครับ

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

**Q: np.unique กับ UNIQUE ใน Excel 365 ต่างกันยังไง?**

คล้ายกันมากครับ แต่ต่างกันสองเรื่อง — อย่างแรก np.unique เรียง array ให้อัตโนมัติ แต่ UNIQUE ของ Excel รักษาลำดับของค่าที่ปรากฏครั้งแรก อย่างที่สอง np.unique เอาไว้กับ array 1D เป็นหลัก ถ้าต้องการรักษาลำดับแบบ Excel ผมจะใช้ dict.fromkeys() หรือ pandas .unique() แทนครับ

**Q: เมื่อใส่ return_counts=True แล้วใช้ผลลัพธ์ยังไง?**

ต้อง unpack tuple ออกมาก่อนครับ เขียนว่า unique_vals, counts = np.unique(arr, return_counts=True) แล้วใช้งานแยกกัน unique_vals[i] คือค่า unique ตัวที่ i และ counts[i] คือจำนวนครั้งที่ค่านั้นปรากฏ ถ้าลืม unpack แล้วเรียก np.unique(arr, return_counts=True)[1] ตรงๆ ก็ได้เหมือนกันครับ

**Q: np.unique ใช้กับ 2D array ได้ไหม?**

ได้ครับ แต่มีเรื่องต้องระวัง — โดย default จะ flatten array ก่อนแล้วหาค่า unique ของทุก element รวมกัน ถ้าต้องการหา unique แบบรายแถวให้ใส่ axis=0 เช่น np.unique(arr_2d, axis=0) จะคืนแถวที่ไม่ซ้ำกัน ซึ่งใช้ได้ดีกับ structured data ครับ

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

- [numpy.unique — NumPy official docs](https://numpy.org/doc/stable/reference/generated/numpy.unique.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/transform/numpy-unique/](https://www.thepexcel.com/functions/python/transform/numpy-unique/)_
