Thep Excel

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

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

df.nunique(axis, dropna)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
2/10

Usefulness
5/10

Syntax & Arguments

df.nunique(axis, dropna)

คืนค่า (Returns)
Series

เรียก df.nunique() กับทั้ง DataFrame จะคืนเป็น Series ที่มี index เป็นชื่อคอลัมน์ และค่าคือจำนวน distinct count ของแต่ละคอลัมน์ครับ — เอาไปกรอง เรียงลำดับ หรือ plot ต่อได้เลย (หมายเหตุ: ถ้าเลือกคอลัมน์เดียวก่อนอย่าง df['col'].nunique() จะได้เป็นตัวเลข int64 ตัวเดียวแทน)

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

Examples

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

df.nunique()

Result:

city 3
product 2
sales 4
dtype: int64

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

df['city'].nunique()

Result:

3

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

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

Result:

4

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

df.nunique(axis=1)

Result:

0 2
1 2
2 2
dtype: int64

FAQs

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

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

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

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

Resources & Related

Additional Notes

เวลาผมเปิดข้อมูลชุดใหม่ที่ AI generate มาให้ คำสั่งแรกๆ ที่ผมชอบเรียกคือ df.nunique() ครับ เพราะมันบอกได้ทันทีว่าแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว

ลองนึกภาพคอลัมน์ ‘จังหวัด’ ที่มี 10,000 แถว แต่จริงๆ แล้วมีแค่ 77 จังหวัด — nunique จะตอบ 77 ให้เลย เทียบกับ Excel ก็เหมือนเราเอาคอลัมน์นั้นไป Remove Duplicates แล้วนับว่าเหลือกี่บรรทัด หรือใช้สูตรนับ unique นั่นแหละครับ

ที่เจ๋งคือเรียกครั้งเดียวกับทั้ง DataFrame มันไล่นับให้ทุกคอลัมน์พร้อมกันเลย ได้ออกมาเป็น Series ที่บอก distinct count ของแต่ละคอลัมน์ทีเดียวจบ ไม่ต้องวนนับทีละคอลัมน์ และโดย default มันจะไม่นับค่าว่าง (NaN) ให้ด้วย

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

Leave a Reply

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