汇总和计算描述统计
调用DataFrame的sum方法将会返回一个含有列小计的Series:
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'])
print df.sum()
'''
输出结果是:
one 9.25
two -5.80
dtype: float64
'''
传入axis=1将会按行进行求和运算:
print df.sum(axis = 1)
'''
输出结果为:
a 1.40
b 2.60
c NaN
d -0.55
dtype: float64
'''
NA值将会自动被排除(除非整个切片都是NA),通过skipna选项可以禁用该功能:
print df.sum(axis = 1,skipna=False)
'''
输出结果为:
a NaN
b 2.60
c NaN
d -0.55
dtype: float64
'''
类似的方法还有mean
这类方法常用参数如下:
还存在一些方法是间接统计,比如返回最大值和最小值的索引(idxmax和idxmin)
print df.idxmax()
print '--------------------'
print df.cumsum() #上下累加,这是一种累计型方法
'''
输出结果如下:
one b
two d
dtype: object
--------------------
one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
'''
DataFrame中存在一种既不是简约型也不是累计型的方法,比如describe,它可以用于一次性产生多个汇总统计:
print df.describe()
'''
输出结果为:
one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
'''
以下是pandas中常用的描述和汇总统计的方法:
唯一值、值计数以及成员资格
第一个函数是unique,它可以得到Series中唯一值数组:
obj= Series(['c','a','d','d','a','c','v','t','t','c'])
uniques = obj.unique()
print uniques
'''
输出结果为:
['c' 'a' 'd' 'v' 't']
'''
这种方式返回的是没有经过排序的,如果需要的话可以使用uniques.sort()方法返回排序的数组。
values_counts用于计算一个Series中各值出现的频率:
print obj.value_counts()
'''
返回结果为:
c 3
d 2
t 2
a 2
v 1
dtype: int64
'''
value_counts还是一个顶级pandas方法,可用于任何数组或序列:
print pd.value_counts(obj.values,sort=False)
最后是isin,它用于判断适量话集合的成员资格,可用于选取Series中或DataFrame列中数据的子集:
mask = obj.isin(['a','c'])
print obj[mask]
'''
输出结果为:
0 c
1 a
4 a
5 c
9 c
dtype: object
'''
以下是常用方发表:
得到每一个元素在每一列中出现的次数:
data = DataFrame({'Qu1':[1, 3, 4, 3, 4],
'Qu2':[2,3,1,2,3],
'Qu3':[1,5,2,4,4]})
print data.apply(pd.value_counts).fillna(0)
'''
输出结果为:
Qu1 Qu2 Qu3
1 1.0 1.0 1.0
2 0.0 2.0 1.0
3 2.0 2.0 0.0
4 2.0 0.0 2.0
5 0.0 0.0 1.0
'''