Pandas 統(tǒng)計(jì)描述操作
1. 前言
上一節(jié)我們學(xué)習(xí)了 Pandas 庫的分組聚合操作,通過聚合函數(shù)對分組后的數(shù)據(jù)集進(jìn)行了描述性的統(tǒng)計(jì)分析,對于各組數(shù)據(jù)的分析起到了很好的幫助作用,那 Pandas 庫中除了上節(jié)我們講到的一些聚合分析函數(shù),還有哪些實(shí)用性較高的統(tǒng)計(jì)描述操作方法呢,本節(jié)課我們將對統(tǒng)計(jì)描述函數(shù)展開學(xué)習(xí)。
2. 描述性統(tǒng)計(jì)函數(shù)
下面我們列舉了幾個(gè)常用的重要函數(shù),上一節(jié)已經(jīng)講述了 count () , sum () , mean () 函數(shù),這里我們將不再講述:
函數(shù)名 | 說明 |
---|---|
min | 計(jì)算最小值 |
max | 計(jì)算最大值 |
cumsum | 計(jì)算累計(jì)總和 |
describe | 計(jì)算匯總統(tǒng)計(jì) |
下面我們通過具體的代碼數(shù)據(jù)實(shí)例看一下各個(gè)函數(shù)的應(yīng)用。
1. min() 和 max() 函數(shù)
這兩個(gè)函數(shù)分別用于計(jì)算指定數(shù)據(jù)集中的最小值和最大值,默認(rèn)的 axis=0 ,按列進(jìn)行計(jì)算。
# 導(dǎo)入pandas包
import pandas as pd
# 初始化數(shù)據(jù)
df1=pd.DataFrame([[96,92],[85,None],[69,90]],
index=[['語文','數(shù)學(xué)','英語']],
columns=[['期中考試','期末考試']])
print(df1)
# --- 輸出結(jié)果 ---
期中考試 期末考試
語文 96 92
數(shù)學(xué) 85 89
英語 69 90
# min 求數(shù)據(jù)集的最小值
df1.min()
# --- 輸出結(jié)果 ---
期中考試 69
期末考試 89
# max 求數(shù)據(jù)集的最大值
df1.max()
# --- 輸出結(jié)果 ---
期中考試 96
期末考試 92
# 結(jié)果解析:通過 min() 和 max() 函數(shù)的操作,我們可以看到求出數(shù)據(jù)集中的最大值和最小值,默認(rèn)是按列計(jì)算,也可以通過參數(shù) axis=1 設(shè)置按行計(jì)算;
# max 求數(shù)據(jù)集的最大值 axis=1
df1.max(axis=1)
# --- 輸出結(jié)果 ---
語文 96
數(shù)學(xué) 89
英語 90
2. cumsum() 函數(shù)
該函數(shù)用于計(jì)算累計(jì)數(shù)值總和,默認(rèn)的 axis=0 ,按列進(jìn)行計(jì)算,通過數(shù)據(jù)處理效果要區(qū)分和 sum () 函數(shù)的區(qū)別。
# 導(dǎo)入pandas包
import pandas as pd
# 初始化數(shù)據(jù)
df1=pd.DataFrame([[96,92,89,94],[85,89,91,90],[69,90,89,88]],
index=[['語文','數(shù)學(xué)','英語']],
columns=[['月考1','月考2','月考3','月考4']])
print(df1)
# --- 輸出結(jié)果 ---
月考1 月考2 月考3 月考4
語文 96 92 89 94
數(shù)學(xué) 85 89 91 90
英語 69 90 89 88
# cumsum 計(jì)算累計(jì)總和,默認(rèn)是按列計(jì)算
df1.cumsum()
# --- 輸出結(jié)果 ---
月考1 月考2 月考3 月考4
語文 96 92 89 94
數(shù)學(xué) 181 181 180 184
英語 250 271 269 272
# sum 計(jì)算總和,默認(rèn)是按列計(jì)算
df1.sum()
# --- 輸出結(jié)果 ---
月考1 250
月考2 271
月考3 269
月考4 272
# 結(jié)果解析:cumsum() 函數(shù)是累計(jì)求和,默認(rèn)是在列上計(jì)算,可以看到各個(gè)月考的行數(shù)據(jù)“數(shù)學(xué)”是“語文”加“數(shù)學(xué)”成績的和,“英語”則是“語文”加“數(shù)學(xué)”加“英語”的和。而 sum() 函數(shù)則是計(jì)算每列數(shù)據(jù)的總和,對各行數(shù)據(jù)沒有影響。
3. describe() 函數(shù)
該函數(shù)用于計(jì)算一些統(tǒng)計(jì)數(shù)據(jù),提供數(shù)據(jù)集的基本信息,包括范圍、大小、波動趨勢等待,用于進(jìn)一步數(shù)據(jù)的分析,該函數(shù)用于計(jì)算列數(shù)據(jù)。該函數(shù)有三個(gè)核心參數(shù):
參數(shù)名 | 說明 |
---|---|
percentile | 可選參數(shù),要包含在輸出中的百分位數(shù),在 0-1 之間,默認(rèn) [.25, .5, .75] |
include | 可選參數(shù),包括的不同數(shù)據(jù)類型列表,默認(rèn)只計(jì)算數(shù)值型,當(dāng)為 all 時(shí)匯總的是所有列的數(shù)據(jù);當(dāng)為 object 時(shí),匯總的是字符串列的數(shù)據(jù);當(dāng)為 number 時(shí),匯總的是數(shù)字列的數(shù)據(jù)。 |
exclude | 可選參數(shù),排除的數(shù)據(jù)類型列表 |
下面我們通過代碼操作數(shù)據(jù)集看一下詳細(xì)的使用方法:
# 導(dǎo)入pandas包
import pandas as pd
# 初始化數(shù)據(jù)
df1=pd.DataFrame([[96,92,89,94,'A級'],[85,89,91,90,'C級'],[69,90,89,88,'B級']],
index=[['語文','數(shù)學(xué)','英語']],
columns=[['月考1','月考2','月考3','月考4','表現(xiàn)級別']])
print(df1)
# --- 輸出結(jié)果 ---
月考1 月考2 月考3 月考4 表現(xiàn)級別
語文 96 92 89 94 A級
數(shù)學(xué) 85 89 91 90 C級
英語 69 90 89 88 B級
# describe 函數(shù)
df1.describe()
# --- 輸出結(jié)果 ---
月考1 月考2 月考3 月考4
count 3.000000 3.000000 2.000000 3.000000
mean 83.333333 90.333333 90.000000 90.666667
std 13.576941 1.527525 1.414214 3.055050
min 69.000000 89.000000 89.000000 88.000000
25% 77.000000 89.500000 89.500000 89.000000
50% 85.000000 90.000000 90.000000 90.000000
75% 90.500000 91.000000 90.500000 92.000000
max 96.000000 92.000000 91.000000 94.000000
# 結(jié)果解析:可以看到 describe() 函數(shù)統(tǒng)計(jì)分析后,默認(rèn)的是只計(jì)算數(shù)值型,包含了多種分析信息,count:數(shù)據(jù)數(shù)量,mean:平均值,std:標(biāo)準(zhǔn)差,min:最小值,25%,50%,75%:對應(yīng)的百分位上的分位數(shù)(計(jì)算方式為最大值減去最小值乘以對應(yīng)的百分位,再加上最小值),max:最大值。這些統(tǒng)計(jì)項(xiàng)能清晰的讓我們了解一組數(shù)據(jù)集的數(shù)據(jù)情況,進(jìn)而選擇合適的分析模型進(jìn)行分析。
# describe 設(shè)置include=‘a(chǎn)ll’
df1.describe(include='all')
# --- 輸出結(jié)果 ---
月考1 月考2 月考3 月考4 表現(xiàn)級別
count 3.000000 3.000000 3.000000 3.000000 3
unique NaN NaN NaN NaN 3
top NaN NaN NaN NaN C級
freq NaN NaN NaN NaN 1
mean 83.333333 90.333333 89.666667 90.666667 NaN
std 13.576941 1.527525 1.154701 3.055050 NaN
min 69.000000 89.000000 89.000000 88.000000 NaN
25% 77.000000 89.500000 89.000000 89.000000 NaN
50% 85.000000 90.000000 89.000000 90.000000 NaN
75% 90.500000 91.000000 90.000000 92.000000 NaN
max 96.000000 92.000000 91.000000 94.000000 NaN
# 結(jié)果解析:通過設(shè)置 include='all' describe() 函數(shù)計(jì)算所有列的數(shù)據(jù),并且針對字符串型的數(shù)據(jù)會有 unique:不同的值有多少;top:出現(xiàn)頻率最高的;freq:重復(fù)的次數(shù)。
# describe 排除數(shù)值列 exclude=‘number’
df1.describe(exclude='number')
# --- 輸出結(jié)果 ---
表現(xiàn)級別
count 3
unique 3
top C級
freq 1
# 結(jié)果解析:通過設(shè)置 exclude 排除數(shù)值列,可以看到最后的描述性統(tǒng)計(jì)只有字符串列的數(shù)據(jù)。
3. 小結(jié)
本節(jié)課程我們主要學(xué)習(xí)了 Pandas 庫中用于統(tǒng)計(jì)描述的操作函數(shù),幫助我們便捷的對數(shù)據(jù)集進(jìn)行統(tǒng)計(jì)分析工作,并在此基礎(chǔ)上開展進(jìn)一步的數(shù)據(jù)分析工作。本節(jié)課程的重點(diǎn)如下:
- 常用的描述性統(tǒng)計(jì)函數(shù)使用,尤其是 describe () 函數(shù)的使用。