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