Pandas入门(下)

Pandas入门(下)

Martin

汇总和计算描述统计

pandas对象拥有一组常用的数学和统计方法。它们大部分都属于约简和汇总统计,用于从Series中提取单个值(如summean)或从DataFrame的行或列中提取一个Series。跟对应的Numpy数组方法相比,它们都是基于没有确实数据的假设而构建的。来看一个例子:

>>> df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=['a','b','c','d'],columns=['one','two'])
>>> df
    one  two
a  1.40  NaN
b  7.10 -4.5
c   NaN  NaN
d  0.75 -1.3

调用DataFramesum方法将返回以含有列小计的Series

>>> df.sum()
one    9.25
two   -5.80
dtype: float64

传入axis=1将会按行进行求和运算:

>>> df.sum(axis=1)
a    1.40
b    2.60
c    0.00
d   -0.55
dtype: float64

NA值会被自动排除,除非整个切片(这里指的是行或列)都是NA。通过skipna选项可以禁用该功能:

>>> df.mean(axis=1,skipna=False)
a      NaN
b    1.300
c      NaN
d   -0.275
dtype: float64

下表列出了这些简约方法的常用项:

选项 说明
axis 约简的轴。DataFrame的行用0,列用1
skipna 排除缺失值,默认值True
level 如果轴是层次化索引(MultiIndex),则根据level分组约简

有些方法(如idxmax和idxmin)返回的是间接统计(比如达到最小值或最大值的索引):

>>> df.idxmax()
one    b
two    d
dtype: object

另一些方法则是累计型的:

>>> df.cumsum()             # 逐行叠加
    one  two
a  1.40  NaN
b  8.50 -4.5
c   NaN  NaN
d  9.25 -5.8

还有种方法,它既不是约简型也不是累计型。describe就是这样的一个例子,它用于一次性产生多个汇总统计:

          one       two
count  3.000000  2.000000
mean   3.083333 -2.900000
std    3.493685  2.262742
min    0.750000 -4.500000
25%         NaN       NaN
50%         NaN       NaN
75%         NaN       NaN
max    7.100000 -1.300000

对于非数值型数据,describe会产生另一种统计汇总:

>>> obj = Series(['a','a','b','c']*4)
>>> obj
0     a
1     a
2     b
3     c
4     a
5     a
6     b
7     c
8     a
9     a
10    b
11    c
12    a
13    a
14    b
15    c
dtype: object

>>> obj.describe()
count     16
unique     3
top        a        # 出现次数最高的选项
freq       8        # 针对的top的频率
dtype: object

下表列出了所有与描述统计相关的方法:

方法 说明
count 非NA值的数量
describe 针对Series或各DataFrame列计算汇总统计
min、max 计算最小值和最大值
argmin、argmax 计算能够获取到最小值和最大值的索引位置
idxmin、idxmax 计算能够获取到最小值和最大值的索引值
quantile 计算样本的分位数(0到1)
sum 值的总和
mean 值的平均数
median 值的算数中位数(50%分位数)
mad 根据平均值计算平均绝对离差
var 样本的方差额
std 样本的标准差
skew 样本值的偏度(三阶矩)
kurt 样本值的峰度(四阶矩)
cumsum 样本值的累计和
cummin、cummax 样本值的累计最大值和累计最小值
cumpord 样本值的累计积
diff 计算一阶差分
pct_change 计算百分数变化
  • 唯一值、值计数以及成员资格

还有一类方法可以从一维Series的值中抽取信息。来个例子:

>>> obj = Series(['c','a','d','a','a','b','b','c','c'])

第一个函数是unique,它可以得到Series中的唯一值数组:

>>> uniques = obj.unique()
>>> uniques
array(['c', 'a', 'd', 'b'], dtype=object)

返回的唯一值是未排序的,如果需要的话,可以对结果再次进行排序(uniques,sor())。value_counts用于计算一个Series中各值出现的频率:

>>> obj.value_counts()
c    3
a    3
b    2
d    1
dtype: int64

为了便于查看,结果Series是按降序排列的(由参数ascending=False控制)。value_counts还是一个顶级ndarray的方法,可用于任何数组或序列:

>>> obj.value_counts(ascending=True)
d    1
b    2
a    3
c    3
dtype: int64

最后是isin函数,它用于判断矢量化集合的成员资格,可用于选取Series中或DataFrame列中数据的子集:

>>> mask = obj.isin(['c','b'])
>>> mask
0     True
1    False
2    False
3    False
4    False</
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值