Pandas 描述性統(tǒng)計

2022-07-13 10:25 更新

描述統(tǒng)計學(xué)(descriptive statistics)是一門統(tǒng)計學(xué)領(lǐng)域的學(xué)科,主要研究如何取得反映客觀現(xiàn)象的數(shù)據(jù),并以圖表形式對所搜集的數(shù)據(jù)進(jìn)行處理和顯示,最終對數(shù)據(jù)的規(guī)律、特征做出綜合性的描述分析。Pandas 庫正是對描述統(tǒng)計學(xué)知識完美應(yīng)用的體現(xiàn),可以說如果沒有“描述統(tǒng)計學(xué)”作為理論基奠,那么 Pandas 是否存在猶未可知。下列表格對 Pandas 常用的統(tǒng)計學(xué)函數(shù)做了簡單的總結(jié):

函數(shù)名稱 描述說明
count() 統(tǒng)計某個非空值的數(shù)量。
sum() 求和
mean() 求均值
median() 求中位數(shù)
mode() 求眾數(shù)
std() 求標(biāo)準(zhǔn)差
min() 求最小值
max() 求最大值
abs() 求絕對值
prod() 求所有數(shù)值的乘積。
cumsum() 計算累計和,axis=0,按照行累加;axis=1,按照列累加。
cumprod() 計算累計積,axis=0,按照行累積;axis=1,按照列累積。
corr() 計算數(shù)列或變量之間的相關(guān)系數(shù),取值-1到1,值越大表示關(guān)聯(lián)性越強。

從描述統(tǒng)計學(xué)角度出發(fā),我們可以對 DataFrame 結(jié)構(gòu)執(zhí)行聚合計算等其他操作,比如 sum() 求和、mean()求均值等方法。
在 DataFrame 中,使用聚合類方法時需要指定軸(axis)參數(shù)。下面介紹兩種傳參方式:

  • 對行操作,默認(rèn)使用 axis=0 或者使用 "index";
  • 對列操作,默認(rèn)使用 axis=1 或者使用 "columns"。


axis軸示意圖
圖1:axis軸示意圖
 從圖 1 可以看出,axis=0 表示按垂直方向進(jìn)行計算,而 axis=1 則表示按水平方向。下面讓我們創(chuàng)建一個 DataFrame,使用它對本節(jié)的內(nèi)容進(jìn)行演示。
創(chuàng)建一個 DataFrame 結(jié)構(gòu),如下所示:

import pandas as pd
import numpy as np
#創(chuàng)建字典型series結(jié)構(gòu)
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df)

輸出結(jié)果:

   Name  Age  Rating
0    小明   25    4.23
1    小亮   26    3.24
2    小紅   25    3.98
3    小華   23    2.56
4    老趙   30    3.20
5    小曹   29    4.60
6    小陳   23    3.80
7    老李   34    3.78
8    老王   40    2.98
9    小馮   30    4.80
10   小何   51    4.10
11   老張   46    3.65

sum()求和

在默認(rèn)情況下,返回 axis=0 的所有值的和。示例如下:

import pandas as pd
import numpy as np
#創(chuàng)建字典型series結(jié)構(gòu)
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#默認(rèn)axis=0或者使用sum("index")
print(df.sum())

輸出結(jié)果:

Name      小明小亮小紅小華老趙小曹小陳老李老王小馮小何老張
Age                            382
Rating                       44.92
dtype: object

注意:sum() 和 cumsum() 函數(shù)可以同時處理數(shù)字和字符串?dāng)?shù)據(jù)。雖然字符聚合通常不被使用,但使用這兩個函數(shù)并不會拋出異常;而對于 abs()、cumprod() 函數(shù)則會拋出異常,因為它們無法操作字符串?dāng)?shù)據(jù)。
下面再看一下 axis=1 的情況,如下所示:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#也可使用sum("columns")或sum(1)
print(df.sum(axis=1))

輸出結(jié)果:

0     29.23
1     29.24
2     28.98
3     25.56
4     33.20
5     33.60
6     26.80
7     37.78
8     42.98
9     34.80
10    55.10
11    49.65
dtype: float64

mean()求均值

示例如下:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.mean())

輸出結(jié)果:

Age       31.833333
Rating     3.743333
dtype: float64

std()求標(biāo)準(zhǔn)差

返回數(shù)值列的標(biāo)準(zhǔn)差,示例如下:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.std())

輸出結(jié)果:

Age       13.976983
Rating     0.661628
dtype: float64

標(biāo)準(zhǔn)差是方差的算術(shù)平方根,它能反映一個數(shù)據(jù)集的離散程度。注意,平均數(shù)相同的兩組數(shù)據(jù),標(biāo)準(zhǔn)差未必相同。

數(shù)據(jù)匯總描述

describe() 函數(shù)顯示與 DataFrame 數(shù)據(jù)列相關(guān)的統(tǒng)計信息摘要。示例如下:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#創(chuàng)建DataFrame對象
df = pd.DataFrame(d)
#求出數(shù)據(jù)的所有描述信息
print(df.describe())

輸出結(jié)果:

             Age     Rating
count  12.000000  12.000000
mean   34.916667   3.743333
std    13.976983   0.661628
min    19.000000   2.560000
25%    24.500000   3.230000
50%    28.000000   3.790000
75%    45.750000   4.132500
max    59.000000   4.800000

describe() 函數(shù)輸出了平均值、std 和 IQR 值(四分位距)等一系列統(tǒng)計信息。通過 describe() 提供的include能夠篩選字符列或者數(shù)字列的摘要信息。
include 相關(guān)參數(shù)值說明如下:

  • object: 表示對字符列進(jìn)行統(tǒng)計信息描述;
  • number:表示對數(shù)字列進(jìn)行統(tǒng)計信息描述;
  • all:匯總所有列的統(tǒng)計信息。

下面看一組示例,如下所示:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.describe(include=["object"]))

輸出結(jié)果:

       Name
count    12
unique   12
top      小紅
freq      1

最后使用all參數(shù),看一下輸出結(jié)果,如下所示:

import pandas as pd
import numpy as np
d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',
   '老李','老王','小馮','小何','老張']),
   'Age':pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.describe(include="all"))

輸出結(jié)果:

       Name        Age     Rating
count    12  12.000000  12.000000
unique   12        NaN        NaN
top      小紅       NaN       NaN
freq      1        NaN        NaN
mean    NaN  34.916667   3.743333
std     NaN  13.976983   0.661628
min     NaN  19.000000   2.560000
25%     NaN  24.500000   3.230000
50%     NaN  28.000000   3.790000
75%     NaN  45.750000   4.132500
max     NaN  59.000000   4.800000
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號