Pandas拥有一组常用的数学和统计方法,这些方法大部分属于约简和汇总统计,主要用于从Series对象或DataFrame对象中提取数据。这些方法都是基于对没有缺失数据的假设而构建的,例如,sum和mean方法,具体示例如下所示:
In [54]: import numpy as np
In [55]: from pandas import Series,DataFrame
In [56]: f = DataFrame([[2.4,3.6,np.nan],[np.nan,np.nan,np.nan],
...: [1.3,3.7,4.9],[0.5,6.6,8.8]],index = ['a','b','c','d'],
...: columns = ['one','two','three'])
In [57]: f_sum = f.sum()
In [58]: f_sum1 = f.sum(axis = 1)
In [59]: f_m = f.mean()
In [60]: f_m1 = f.mean(axis = 1)
上述代码是使用DataFrame对象的sum和mean方法,其中In [57]是对DataFrame对象按列求和,并将求和后的结果赋值给变量f_sum;In [58]是对DataFrame对象按行求和,并将求和后的结果赋值给变量f_sum1;In [59]是对DataFrame对象按列求平均值,并将求平均值后的结果赋值给变量f_mean;In [60]是对DataFrame对象按行求平均值,并将求平均值后的结果赋值给变量f_mean1。各变量的运行结果如下所示:
In [61]: f
Out[61]:
one two three
a 2.4 3.6 NaN
b NaN NaN NaN
c 1.3 3.7 4.9
d 0.5 6.6 8.8
In [62]: f_sum
Out[62]:
one 4.2
two 13.9
three 13.7
dtype: float64
In [63]: f_sum1
Out[63]:
a 6.0
b 0.0
c 9.9
d 15.9
dtype: float64
In [64]: f_m
Out[64]:
one 1.400000
two 4.633333
three 6.850000
dtype: float64
In [65]: f_m1
Out[65]:
a 3.0
b NaN
c 3.3
d 5.3
dtype: float64
从上述运行结果可看出,无论是对DataFrame对象的行或列求和,还是对其求平均数,都是默认自动排除NaN值,但通过skipna属性可禁用上述功能,具体示例如下:
In [66]: f_mean = f.mean(axis = 1,skipna = False)
上述代码是使用skipna属性禁用自动排除NaN值的功能,运行结果如下所示:
In [67]: f_mean
Out[67]:
a NaN
b NaN
c 3.3
d 5.3
dtype: float64
从上述运行结果可以看出,禁用自动排除NaN值功能后,只要计算的内容中含有NaN值,计算结果就都为NaN值。约简方法中提供了很多选项,具体如表4.8所示。
选项 | 说明 |
---|---|
axis | 约简的轴,取值一般为0(行)或1(列) |
skipna | 过滤缺失值(NaN值),默认值为True |
level | 若轴是层次化索引的(即MultiIndex),则根据level分组约简 |
上述方法返回的是直接统计,还有一些方法返回的是间接统计,例如,idxmin和idxmax方法,具体示例如下所示:
In [73]: import numpy as np
In [74]: from pandas import Series,DataFrame
In [75]: f = DataFrame([[2.4,3.6,np.nan],[np.nan,np.nan,np.nan],
...: [1.3,3.7,4.9],[0.5,6.6,8.8]],index = ['a','b','c','d'],
...: columns = ['one','two','three' ])
In [76]: f1 = f.idxmin()
In [77]: f2 = f.idxmax()
上述代码是使用DataFrame对象的idxmin和idxmax方法,其中In [76]是获取达到最小值的索引,并将返回结果赋值给变量f1;In [77]是获取达到最大值的索引,并将返回结果赋值给变量f2。各变量的运行结果如下所示:
In [78]: f
Out[78]:
one two three
a 2.4 3.6 NaN
b NaN NaN NaN
c 1.3 3.7 4.9
d 0.5 6.6 8.8
In [79]: f1
Out[79]:
one d
two a
three c
dtype: object
In [80]: f2
Out[80]:
one a
two d
three d
dtype: object
从上述运行结果可以看出,idxmin或idxmax方法返回的是最小值或最大值的索引,而并非是直接的数据。与描述统计相关的方法有很多,可以实现不同的需求,例如,约简、间接统计、累计统计等,具体如表4.9所示。
方法 | 说明 |
---|---|
count | 非NA值的数量 |
describe | 针对Series或DataFrame各列计算汇总统计 |
min、max | 计算最小值和最大值 |
argmin、argmax | 计算能够获取到的最小值和最大值的索引位置(整数) |
idxmin、idxmax | 计算能够获取到最小值和最大值的索引值 |
quantile | 计算样本的分位数(0到1) |
sum | 指的总和 |
mean | 指的平均数 |
median | 值的算术中位数(50%分位数) |
mad | 根据平均值计算平均绝对离差 |
var | 样本值的方差 |
std | 样本值的标准差 |
skew | 样本值的偏度(三阶矩) |
kurt | 样本值的峰度(四阶矩) |
cumsum | 样本值的累计和 |
cummax、cummin | 样本值的累计最大值和累计最小值 |
cumprod | 样本值的累计积 |
diff | 计算一阶差分(对时间序列很有用) |
pct_change | 计算百分数变化 |
网友评论