pandas是Python中處理表格數據的強大工具,而數據統計分析是數據分析的基礎。今天,我們就來聊聊5個最常用的pandas統計函數,讓你快速掌握基礎分析技能,即使是初學者也能輕鬆上手!
一、sum():快速求和,統計總量¶
作用:計算某列(或某行)所有數值的總和。
場景:比如統計全班某科目的總分、某班級所有學生的銷售額總和等。
示例:
假設我們有一個學生成績表,包含數學、語文、英語三門課的分數:
import pandas as pd
# 創建數據
data = {
"學生ID": [1, 2, 3, 4, 5],
"數學": [85, 92, 78, 90, 88],
"語文": [76, 88, 95, 80, 79],
"英語": [90, 85, 82, 93, 87]
}
df = pd.DataFrame(data)
# 計算數學總分(單列求和)
math_total = df["數學"].sum()
print("數學總分:", math_total) # 輸出:數學總分: 433(85+92+78+90+88=433)
# 計算所有科目總分(對所有數值列求和)
all_subjects_total = df.sum()
print(all_subjects_total) # 會輸出各列的總和,包括學生ID(但ID是整數,求和無意義,pandas會自動忽略非數值列)
注意:
- sum()默認會自動跳過缺失值(NaN),如果數據中有空值,結果不會受影響。
- 想對行求和(比如每行學生的總分),可以加參數 axis=1:df.sum(axis=1)。
二、mean():計算平均值,反映集中趨勢¶
作用:計算某列(或某行)的平均值(總和除以數量)。
場景:比如統計某科目的平均分、班級平均分數等。
示例:
用上面的成績表計算數學平均分:
# 數學平均分
math_avg = df["數學"].mean()
print("數學平均分:", math_avg) # 輸出:數學平均分: 86.6(433/5=86.6)
# 所有科目平均分(對數值列求平均)
all_subjects_avg = df.mean()
print(all_subjects_avg) # 各科目平均分:數學86.6,語文83.6,英語87.4
注意:
- 同樣會自動忽略缺失值,若數據無缺失,結果更準確。
- 平均值容易受極端值影響(比如個別高分/低分會拉高/拉低整體),後續可結合中位數分析。
三、median():計算中位數,抗極端值干擾¶
作用:找到數據排序後的中間值,反映數據的“中間水平”。
場景:當數據中有極端值(如滿分或0分)時,中位數比平均值更可靠。
示例:
假設數學成績中有一個極端低分(比如學生6的數學是50分,替換原數據中的某個值):
# 先修改數據(添加極端值)
data["數學"] = [85, 92, 78, 90, 88, 50] # 新增學生6
df = pd.DataFrame(data)
# 計算數學平均分(受極端低分影響)
math_avg = df["數學"].mean() # 433+50=483,483/6=80.5
print("數學平均分(含極端值):", math_avg) # 輸出:80.5
# 計算中位數(不受極端值影響)
math_median = df["數學"].median() # 排序後:50,78,85,88,90,92 → 中間兩個數(85+88)/2=86.5
print("數學中位數(含極端值):", math_median) # 輸出:86.5
結論:中位數更適合反映“大多數數據的真實水平”,尤其是數據分佈不均時。
四、max() 和 min():找出最大/最小值¶
作用:分別返回某列(或某行)的最大值和最小值。
場景:統計最高分、最低分,或者某指標的波動範圍。
示例:
# 數學最高分
math_max = df["數學"].max()
print("數學最高分:", math_max) # 輸出:92
# 數學最低分
math_min = df["數學"].min()
print("數學最低分:", math_min) # 輸出:50
# 對整個DataFrame所有數值列找最大/最小值
df_max = df.max() # 各列最大值
df_min = df.min() # 各列最小值
print("各科目最高分:", df_max[["數學", "語文", "英語"]]) # 輸出:數學92,語文95,英語93
五、describe():一站式描述性統計¶
作用:對數據進行“全方位體檢”,一次性輸出count(數量)、mean(均值)、std(標準差)、min/max(極值)、25%/50%/75%(分位數)。
場景:快速瞭解數據的整體分佈、波動範圍和離散程度。
示例:
# 對所有數值列(如數學、語文、英語)做統計
df_describe = df[["數學", "語文", "英語"]].describe()
print(df_describe)
輸出結果(簡化):
數學 語文 英語
count 6.000000 6.000000 6.000000
mean 80.500000 82.166667 84.166667
std 14.720756 9.622553 8.516326
min 50.000000 76.000000 79.000000
25% 78.000000 79.250000 80.750000
50% 86.500000 83.000000 85.000000
75% 88.750000 88.000000 90.000000
max 92.000000 95.000000 93.000000
關鍵指標解釋:
- std(標準差):數值越大,數據波動越劇烈(比如英語std=8.5,數學std=14.7,說明數學分數差距更大)。
- 25%/75%:四分之一分位數和四分之三分位數,中間50%的數據落在這個區間內。
總結:5個函數,從“基礎”到“進階”¶
這5個函數(sum/mean/median/max/min/describe)是數據分析的“基本功”。通過它們,你可以快速回答以下問題:
- 數據總量是多少?(sum)
- 平均水平如何?(mean)
- 中間水平和波動範圍?(median/std)
- 極值是多少?(max/min)
後續你可以繼續學習分組統計(groupby)、標準差(std)等進階內容,逐步提升數據分析能力!
小練習:試着用上述方法統計自己學習資料裏的成績數據,或者用pandas生成隨機數據,練習這些函數的使用吧!