描述統(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ù)。下面介紹兩種傳參方式:
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
在默認(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
示例如下:
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
返回數(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)差未必相同。
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ù)值說明如下:
下面看一組示例,如下所示:
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
更多建議: