一、汇总和计算描述性统计
pandas对象拥有一组常用的数学和统计方法。他们大部分都属于约简和汇总统计,用于从Series中提取单个值(如mean或sum)或从DataFrame的行或列中提取一个Series。跟对应的NumPy数组方法相比,他们都是基于没有缺失数据的假设而构建的。
下面是一个简单的DataFrame:
>>> import numpy as np
>>> import pandas as pd
>>> from pandas import Series,DataFrame
>>> 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
调用DataFrame的sum方法将会返回一个含有列的小计的Series:
>>> df.sum()
one 9.25
two -5.80
dtype: float64
通过设置axis=1 可以按行进行求和计算。
NA值将会被自动剔除,除非整个切片都是NA。通过skipna选项可以禁用该功能。
下面为一些约简方法常用选项:
有些方法(如idxmin和idxmax)返回的是间接统计(比如达到最大值或最小值的索引):
>>> df
one two
a 1.40 2.5
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
>>> df.idxmax()
one b #第one列最大的一行
two a #第two列最大的一行
dtype: object
一些方法则是累计型的:
>>> df.cumsum() #将每一行逐次累加
one two
a 1.40 2.5
b 8.50 -2.0
c NaN NaN
d 9.25 -3.3
还有一些方法,既不是约简型也不是累计型
>>> df.describe()
one two
count 3.000000 3.000000
mean 3.083333 -1.100000
std 3.493685 3.504283
min 0.750000 -4.500000
25% 1.075000 -2.900000
50% 1.400000 -1.300000
75% 4.250000 0.600000
max 7.100000 2.500000
对于非数值型的数据,describe会产生另一种汇总统计:
>>> obj=Series(['a','a','b','c']*4)
>>> obj.describe()
count 16
unique 3
top a
freq 8
dtype: object
下表列出了所有与描述统计相关的方法:
唯一值、值计数以及成员资格
从一维Series的值中抽取信息。以下这个Series为例:
obj=Series(['c','a','d','a','a','b','b','c','c'])
使用unique函数,可以去除Series中的重复值,获得唯一值数组:
>>> obj.unique()
array(['c', 'a', 'd', 'b'], dtype=object)
value_counts 用于计算一个Series中各值出现的频率:
>>> obj.value_counts()
c 3
a 3
b 2
d 1
dtype: int64
为了方便查看,结果Series是按值频率降序排列的。
value_counts 还是一个顶级的pandas方法,可用于任何数组的或序列:
isin用于判断矢量化最集合的成员资格(值是否存在与集合中),可用于选取Series中或DataFrame列中的数据的子集:
>>> obj.isin(['b','c'])
0 True
1 False
2 False
3 False