df.mean() ใน pandas ผมใช้หาค่าเฉลี่ยของแต่ละคอลัมน์ใน DataFrame ทีละรอบเดียว เหมือนกับพิมพ์ AVERAGE ทุกคอลัมน์พร้อมกันเลยครับ ถ้าต้องการแค่คอลัมน์เดียวก็ใช้ df[‘col’].mean() ได้ค่าตัวเลขออกมาเลย
df.mean(axis, numeric_only)
df.mean(axis, numeric_only)
Series
คืน Series ที่มี index เป็นชื่อคอลัมน์ และ value เป็นค่าเฉลี่ยของแต่ละคอลัมน์ครับ ถ้าต้องการนำค่าเฉลี่ยไปใช้งานต่อก็ index ชื่อคอลัมน์ได้เลย เช่น result['score']
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| axis | int | str | Optional | 0 | ทิศทางการคำนวณ: 0 หรือ ‘index’ = คำนวณตามคอลัมน์ (เฉลี่ยแต่ละคอลัมน์), 1 หรือ ‘columns’ = คำนวณตามแถว (เฉลี่ยแต่ละแถวข้ามคอลัมน์) |
| numeric_only | bool | Optional | False | ถ้า True จะคำนวณเฉพาะคอลัมน์ตัวเลข ข้ามคอลัมน์ข้อความไปเลย ผมแนะนำให้ใส่ True เสมอเมื่อตารางมีคอลัมน์ผสมครับ |
df.mean()df.mean()
score 81.25
bonus 7.50
dtype: float64
df['score'].mean()df['score'].mean()
81.25
df.mean(numeric_only=True)df.mean(numeric_only=True)
score 80.000000
bonus 7.666667
dtype: float64
df.mean(axis=1)df.mean(axis=1)
0 81.666667
1 85.000000
2 83.333333
dtype: float64
ต่างกันที่สิ่งที่ได้กลับมาครับ df.mean() คืน Series ที่มีค่าเฉลี่ยของทุกคอลัมน์ตัวเลข ส่วน df[‘col’].mean() เลือกคอลัมน์เดียวก่อนแล้วค่อยหาเฉลี่ย ได้ตัวเลขออกมาเลย เหมือน =AVERAGE(ทั้งตาราง) vs =AVERAGE(คอลัมน์เดียว) ใน Excel ครับ ผมใช้แบบหลังบ่อยกว่าเมื่อต้องการค่าตัวเลขไปใช้ต่อ
ไม่นับครับ pandas ข้าม NaN โดยอัตโนมัติ เหมือนกับที่ Excel AVERAGE ข้ามเซลล์ว่างให้เลย เช่น [80, NaN, 90] จะได้ค่าเฉลี่ย 85 ไม่ใช่ 56.67 ผมถือว่าเป็น default ที่ดีมากๆ ของ pandas เลยครับ ไม่ต้องกรอง NaN ออกก่อน
แค่เปลี่ยนชื่อ method ครับ ใช้ df.sum(), df.count(), df.max(), df.min() ทุกตัวรองรับ axis และ numeric_only แบบเดียวกับ .mean() เป๊ะเลย จำแค่ว่าพวกนี้คือ “ตระกูลเดียวกัน” แล้วใช้ได้ทุกตัวครับ
ใน Excel เวลาอยากหาค่าเฉลี่ยของคอลัมน์นึง เราก็พิมพ์ =AVERAGE(B2:B100) ครับ pandas ทำแบบเดียวกันได้ แต่เจ๋งกว่าตรงที่เรียก .mean() ครั้งเดียวแล้วได้ค่าเฉลี่ยของทุกคอลัมน์ตัวเลขในตารางออกมาพร้อมกันเป็น Series เลย ไม่ต้องทำทีละคอลัมน์
ที่เจ๋งคือ .mean() เป็นหนึ่งในตระกูล aggregation method ที่ pandas มีให้ครบ ได้แก่ .sum() (ผลรวม), .count() (นับแถว), .max() (ค่าสูงสุด), .min() (ค่าต่ำสุด) ทุกตัวใช้วิธีเดียวกันเป๊ะ จำแค่ชื่อเปลี่ยนก็ใช้ได้ครบเลยครับ
ส่วนตัวผมจะจำง่ายๆ ว่า ถ้าอยากได้ค่าเฉลี่ยทั้งตาราง → df.mean(numeric_only=True), ถ้าอยากได้คอลัมน์เดียว → df[‘col’].mean(), ถ้าอยากเฉลี่ยตามแถว (เทียบกันข้ามคอลัมน์) → df.mean(axis=1) ครับ 😎