nunique ใน pandas ผมใช้นับว่าในแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว เหมือนกับการ Remove Duplicates ใน Excel แล้วนับจำนวนที่เหลือ หรือนับ unique ด้วย COUNTA นั่นแหละครับ เหมาะมากตอนอยากรู้ว่าข้อมูลมีกี่ลูกค้า กี่จังหวัด หรือกี่ประเภท
df.nunique(axis, dropna)
df.nunique(axis, dropna)
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 ครับ |
df.nunique()df.nunique()
city 3
product 2
sales 4
dtype: int64
df['city'].nunique()df['city'].nunique()
3
df['grade'].nunique(dropna=False)df['grade'].nunique(dropna=False)
4
df.nunique(axis=1)df.nunique(axis=1)
0 2
1 2
2 2
dtype: int64
ต่างกันชัดเจนครับ count นับ ‘จำนวนค่าที่ไม่ใช่ค่าว่าง’ ทั้งหมด (รวมตัวที่ซ้ำด้วย) ส่วน nunique นับเฉพาะ ‘ค่าที่ไม่ซ้ำกัน’ เช่น คอลัมน์ [‘A’,’A’,’B’] count จะได้ 3 แต่ nunique จะได้ 2 ครับ เวลาผมอยากรู้ว่ามีกี่ประเภท/กี่รายชื่อจริงๆ ผมใช้ nunique เสมอ
nunique บอกแค่ ‘จำนวน’ ค่าที่ไม่ซ้ำครับ ถ้าอยากเห็นว่าแต่ละค่าเป็นอะไรและซ้ำกี่ครั้ง ให้ใช้ value_counts() แทน มันจะคืนรายการค่าพร้อมจำนวนนับให้เลย ส่วนตัวผมมักเริ่มจาก nunique เพื่อดูภาพรวมก่อน แล้วค่อยเจาะด้วย value_counts ครับ
เวลาผมเปิดข้อมูลชุดใหม่ที่ AI generate มาให้ คำสั่งแรกๆ ที่ผมชอบเรียกคือ df.nunique() ครับ เพราะมันบอกได้ทันทีว่าแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว
ลองนึกภาพคอลัมน์ ‘จังหวัด’ ที่มี 10,000 แถว แต่จริงๆ แล้วมีแค่ 77 จังหวัด — nunique จะตอบ 77 ให้เลย เทียบกับ Excel ก็เหมือนเราเอาคอลัมน์นั้นไป Remove Duplicates แล้วนับว่าเหลือกี่บรรทัด หรือใช้สูตรนับ unique นั่นแหละครับ
ที่เจ๋งคือเรียกครั้งเดียวกับทั้ง DataFrame มันไล่นับให้ทุกคอลัมน์พร้อมกันเลย ได้ออกมาเป็น Series ที่บอก distinct count ของแต่ละคอลัมน์ทีเดียวจบ ไม่ต้องวนนับทีละคอลัมน์ และโดย default มันจะไม่นับค่าว่าง (NaN) ให้ด้วย
ส่วนตัวผมใช้ nunique เป็นตัวเช็คสุขภาพข้อมูลตลอดครับ — ถ้าคอลัมน์ที่ควรจะเป็นรหัสไม่ซ้ำ (เช่น เลขบัตร) ดันมี nunique น้อยกว่าจำนวนแถว ก็แปลว่ามีข้อมูลซ้ำซ่อนอยู่ ต้องไปไล่ดูแล้วล่ะ 😎