df.mean() ใน pandas ผมใช้หาค่าเฉลี่ยของแต่ละคอลัมน์ใน DataFrame ทีละรอบเดียว เหมือนกับพิมพ์ AVERAGE ทุกคอลัมน์พร้อมกันเลยครับ ถ้าต้องการแค่คอลัมน์เดียวก็ใช้ df[‘col’].mean() ได้ค่าตัวเลขออกมาเลย
Series
คืน Series ที่มี index เป็นชื่อคอลัมน์ และ value เป็นค่าเฉลี่ยของแต่ละคอลัมน์ครับ ถ้าต้องการนำค่าเฉลี่ยไปใช้งานต่อก็ index ชื่อคอลัมน์ได้เลย เช่น result['score']
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| [axis]ไม่บังคับ | int | str | 0 | ทิศทางการคำนวณ: 0 หรือ ‘index’ = คำนวณตามคอลัมน์ (เฉลี่ยแต่ละคอลัมน์), 1 หรือ ‘columns’ = คำนวณตามแถว (เฉลี่ยแต่ละแถวข้ามคอลัมน์) |
| [numeric_only]ไม่บังคับ | bool | False | ถ้า True จะคำนวณเฉพาะคอลัมน์ตัวเลข ข้ามคอลัมน์ข้อความไปเลย ผมแนะนำให้ใส่ True เสมอเมื่อตารางมีคอลัมน์ผสมครับ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
ใน 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) ครับ 😎
ผมเรียก df.mean() ครั้งเดียวแต่ได้ค่าเฉลี่ยของทั้ง score และ bonus ออกมาพร้อมกันเป็น Series ครับ ไม่ต้องพิมพ์ AVERAGE ทีละคอลัมน์เหมือนใน Excel แล้ว
เลือกเฉพาะคอลัมน์ score แล้วเรียก .mean() ได้ค่าเฉลี่ยออกมาเป็นตัวเลขเดียวเลยครับ เทียบกับ Excel คือ =AVERAGE(B2:B5) นั่นเองครับ
ตารางมีคอลัมน์ name ที่เป็นข้อความปนอยู่ครับ ถ้าเรียก df.mean() เฉยๆ อาจได้ warning ดังนั้นผมใส่ numeric_only=True เพื่อบอกว่าให้คำนวณเฉพาะคอลัมน์ตัวเลขอย่าง score และ bonus เท่านั้น ปลอดภัยกว่าครับ
axis=1 บอกให้คำนวณตามแถวแทนคอลัมน์ครับ เหมาะตอนมีคะแนน q1 q2 q3 ของนักเรียนแต่ละคน แล้วอยากได้คะแนนเฉลี่ยรวมของแต่ละคน เทียบกับ Excel คือ =AVERAGE(A2:C2) แล้วลากสูตรลงทุกแถวนั่นแหละครับ
ต่างกันที่สิ่งที่ได้กลับมาครับ 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() เป๊ะเลย จำแค่ว่าพวกนี้คือ "ตระกูลเดียวกัน" แล้วใช้ได้ทุกตัวครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas mean จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ
df.describe() ใน pandas ผมใช้สำหรับดูสถิติพื้นฐานของข้อมูลในทุกคอลัมน์พร้อมกันในคำสั่งเดียว ทั้ง count, mean, std, min, max และ percentile ช่วยให้เข้าใจภาพรวมของชุดข้อมูลได้เร็วมากก่อนเริ่มวิเคราะห์จริงครับ
groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ
df.sum() ผมใช้รวมค่าตัวเลขใน DataFrame ครับ ถ้าใครคุ้นกับ SUM ใน Excel ตัวนี้คือ SUM นั่นแหละ แต่ของแถมคือมันลากรวมให้ทุกคอลัมน์พร้อมกันในคำสั่งเดียว ไม่ต้องลากสูตรทีละช่อง
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่