Thep Excel

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

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

>_
df.nunique(axis, dropna)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าSeries

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

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

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

Additional Notes

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

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

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

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

Examples

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

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

>_
df.nunique()

ผลลัพธ์city 3
product 2
sales 4
dtype: int64
ตัวอย่างที่ 2: นับค่าที่ไม่ซ้ำของคอลัมน์เดียวdf['city'].nunique()

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

>_
df['city'].nunique()

ผลลัพธ์3
ตัวอย่างที่ 3: จัดการค่าว่าง (NaN) ด้วย dropnadf['grade'].nunique(dropna=False)

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

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

ผลลัพธ์4
ตัวอย่างที่ 4: นับค่าที่ไม่ซ้ำตามแนวแถวด้วย axis=1df.nunique(axis=1)

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

>_
df.nunique(axis=1)

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

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

ฟังก์ชันนี้pandas nuniqueAggregation
Aggregation (2)
pandas describe

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

pandas value_counts

Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน้อยอัตโนมัติ ใช้ดูการกระจายของข้อมูลหรือหาค่าที่พบบ่อยสุดได้เร็วมากครับ

Cleaning (1)
pandas drop_duplicates

drop_duplicates ใน pandas ผมใช้สำหรับลบแถวข้อมูลที่ซ้ำกันออกจาก DataFrame เหมือนกับปุ่ม Remove Duplicates ใน Excel เลยครับ แต่ยืดหยุ่นกว่าตรงที่เราเลือกได้ว่าจะดูซ้ำจากคอลัมน์ไหน และจะเก็บแถวแรกหรือแถวสุดท้ายไว้

Comments

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