前言:
当前朋友们对“python做统计统计的函数”大致比较讲究,姐妹们都需要分析一些“python做统计统计的函数”的相关资讯。那么小编在网上网罗了一些关于“python做统计统计的函数””的相关文章,希望兄弟们能喜欢,你们一起来学习一下吧!大家好,最近整理了pandas中20个常用统计函数和用法,建议收藏学习~
模拟数据
为了解释每个函数的使用,模拟了一份带有空值的数据:
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsdf = pd.DataFrame({ "sex":["male","male","female","female","male"], "age":[22,24,25,26,24], "chinese":[100,120,110,100,90], "math":[90,np.nan,100,80,120], # 存在空值 "english":[90,130,90,80,100]})df描述统计信息describe
descirbe方法只能针对序列或数据框,一维数组是没有这个方法的;同时默认只能针对数值型的数据进行统计:
DataFrame.describe(percentiles=None,include=None,exclude=None)percentiles:可选择的百分数,列表形式;数值在0-1之间,默认是[.25,.5,.75]include/exclude:包含和排除的数据类型信息
返回的信息包含:
非空值的数量count;特例:math字段中有一个空值均值mean标准差std最小值min最大值max25%、50%、75%分位数
df.describe()
添加了参数后的情况,我们发现:
sex字段的相关信息也被显示出来显示的信息更丰富,多了unique、top、freq等等非空值数量count
返回的是每个字段中非空值的数量
In [5]:
df.count()
Out[5]:
sex 5age 5chinese 5math 4 # 包含一个空值english 5dtype: int64求和sum
In [6]:
df.sum()
在这里我们发现:如果字段是object类型的,sum函数的结果就是直接将全部取值拼接起来
Out[6]:
sex malemalefemalefemalemale # 拼接age 121 # 相加求和chinese 520math 390.0english 490dtype: object最大值max
In [7]:
df.max()
针对字符串的最值(最大值或者最小值),是根据字母的ASCII码大小来进行比较的:
先比较首字母的大小首字母相同的话,再比较第二个字母
Out[7]:
sex male age 26chinese 120math 120.0english 130dtype: object最小值min
和max函数的求解是类似的:
In [8]:
df.min()
Out[8]:
sex femaleage 22chinese 90math 80.0english 80dtype: object分位数quantile
返回指定位置的分位数
In [9]:
df.quantile(0.2)
Out[9]:
age 23.6chinese 98.0math 86.0english 88.0Name: 0.2, dtype: float64
In [10]:
df.quantile(0.25)
Out[10]:
age 24.0chinese 100.0math 87.5english 90.0Name: 0.25, dtype: float64
In [11]:
df.quantile(0.75)
Out[11]:
age 25.0chinese 110.0math 105.0english 100.0Name: 0.75, dtype: float64
通过箱型图可以展示一组数据的25%、50%、75%的中位数:
In [12]:
plt.figure(figsize=(12,6))#设置画布的尺寸plt.boxplot([df["age"],df["chinese"],df["english"]], labels = ["age","chinese","english"],# vert=False, showmeans=True, patch_artist = True, boxprops = {'color':'orangered','facecolor':'pink'}# showgrid=True )plt.show()
箱型图的具体展示信息:
均值mean
一组数据的平均值
In [13]:
df.mean()
Out[13]:
age 24.2chinese 104.0math 97.5english 98.0dtype: float64
通过下面的例子我们发现:如果字段中存在缺失值(math存在缺失值),此时样本的个数会自动忽略缺失值的总数
In [14]:
390/4 # 个数不含空值
Out[14]:
97.5中值/中位数median
比如:1,2,3,4,5 的中位数就是3
再比如:1,2,3,4,5,6 的中位数就是 3+4 = 3.5
In [15]:
df.median()
Out[15]:
age 24.0chinese 100.0math 95.0english 90.0dtype: float64众数mode
一组数据中出现次数最多的数
In [16]:
df.mode()
Out[16]:
最大值索引idmax
idxmax() 返回的是最大值得索引
In [17]:
df["age"].idxmax()
Out[17]:
3
In [18]:
df["chinese"].idxmin()
Out[18]:
4
不能字符类型的字段使用该函数,Pandas不支持:
In [19]:
df["sex"].idxmax()最小值索引idxmin
返回最小值所在的索引
In [20]:
df["age"].idxmin()
Out[20]:
0
In [21]:
df["math"].idxmin()
Out[21]:
3
In [22]:
df["sex"].idxmin()
不能字符类型的字段使用该函数,Pandas不支持:
方差var
计算一组数据的方差,需要注意的是:numpy中的方差叫总体方差,pandas中的方差叫样本方差
标准差(或方差)分为 总体标准差(方差)和 样本标准差(方差)
前者分母为n,右pian的;后者分母为n-1,是无偏的pandas里是算无偏的;numpy里是有偏的
In [23]:
df.var()
Out[23]:
age 2.200000chinese 130.000000math 291.666667 # pandas计算结果english 370.000000dtype: float64
In [24]:
df["math"].var()
Out[24]:
291.6666666666667
In [25]:
np.var(df["math"]) # numpy计算结果
Out[25]:
218.75
In [26]:
np.var(df["age"])
Out[26]:
1.7600000000000002
In [27]:
np.var(df["english"])
Out[27]:
296.0标准差std
返回的是一组数据的标准差
In [28]:
df.std()
Out[28]:
age 1.483240chinese 11.401754math 17.078251english 19.235384dtype: float64
In [29]:
np.std(df["math"])
Out[29]:
14.79019945774904
In [30]:
np.std(df["english"])
Out[30]:
17.204650534085253
In [31]:
np.std(df["age"])
Out[31]:
1.32664991614216
如何理解pandas和numpy两种方法对方差的求解不同:
平均绝对偏差mad
In [32]:
df.mad()
Out[32]:
age 1.04chinese 8.80math 12.50english 13.60dtype: float64
以字段age为例:
In [33]:
df["age"].mad()
Out[33]:
1.0399999999999998
In [34]:
df["age"].tolist()
Out[34]:
[22, 24, 25, 26, 24]
In [35]:
age_mean = df["age"].mean()age_mean
Out[35]:
24.2
In [36]:
(abs(22-age_mean) + abs(24-age_mean) + abs(25-age_mean) + abs(26-age_mean) + abs(24-age_mean)) / 5
Out[36]:
1.0399999999999998偏度-skew
偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。
偏度(Skewness)亦称偏态、偏态系数,表征概率分布密度曲线相对于平均值不对称程度的特征数。
直观看来就是密度函数曲线尾部的相对长度。定义上偏度是样本的三阶标准化矩:
In [37]:
df.skew()
Out[37]:
age -0.551618chinese 0.404796math 0.752837english 1.517474dtype: float64
In [38]:
df["age"].skew()
Out[38]:
-0.5516180692881046峰度-kurt
返回的是峰度值
In [39]:
df.kurt()
Out[39]:
age 0.867769chinese -0.177515math 0.342857english 2.607743dtype: float64
In [40]:
df["age"].kurt()
Out[40]:
0.8677685950413174
In [41]:
df["math"].kurt()
Out[41]:
0.3428571428571434绝对值abs
返回数据的绝对值:
In [45]:
df["age"].abs()
Out[45]:
0 221 242 253 264 24Name: age, dtype: int64
如果存在缺失值,绝对值函数求解后仍是NaN:
In [46]:
df["math"].abs()
Out[46]:
0 90.01 NaN2 100.03 80.04 120.0Name: math, dtype: float64
绝对值函数是针对数值型的字段,不能对字符类型的字段求绝对值:
In [47]:
# 字符类型的数据报错df["sex"].abs()元素乘积prod
In [48]:
df.prod()
Out[48]:
age 8.236800e+06chinese 1.188000e+10math 8.640000e+07english 8.424000e+09dtype: float64
In [49]:
df["age"].tolist()
Out[49]:
[22, 24, 25, 26, 24]
In [50]:
22 * 24 * 25 * 26 * 24
Out[50]:
8236800累计求和cumsum
In [51]:
df.cumsum()累计乘积cumprod
In [52]:
df["age"].cumprod()
Out[52]:
0 221 5282 132003 3432004 8236800Name: age, dtype: int64
In [53]:
df["math"].cumprod()
Out[53]:
0 90.01 NaN2 9000.03 720000.04 86400000.0Name: math, dtype: float64
In [54]:
# 字符类型字段报错df["sex"].cumprod()20个统计函数
最后再总结下Pandas中常用来描述统计信息的函数:
原文链接:
标签: #python做统计统计的函数 #pandas列运算 #python求平均值例子 #pandas百分数