Pandas 统计函数

本章介绍Pandas 统计函数,和Numpy统计函数类似,统计方法有助于理解和分析数据的行为,现在我们将学习一些统计函数,可以将这些函数应用到Pandas的对象上。下面着重介绍pct_change(),协方差(cov()),相关系数(corr()),数据排名(rank())。

计算变化百分数

Series,DatFrames和Panel都有pct_change()函数,此函数将每个元素与其前一个元素进行比较,并计算变化百分比。

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4,5,4])
print (s.pct_change())

df = pd.DataFrame(np.random.randn(5, 2))
print (df.pct_change())

执行上面示例代码,得到以下结果 –

0         NaN
1    1.000000
2    0.500000
3    0.333333
4    0.250000
5   -0.200000
dtype: float64
          0           1
0       NaN         NaN
1  0.384032   -0.996141
2 -1.736876  679.793981
3  1.063848   -0.441469
4 -1.060066   -1.576158

默认情况下,pct_change()对列进行操作; 如果想应用到行上,那么可使用axis = 1参数。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3))
print (df.pct_change(axis = 1))

执行上面示例代码,得到以下结果 –

    0          1          2
0 NaN  -0.599407  -1.738091
1 NaN   5.394569  -0.862050
2 NaN   1.020426   0.336214
3 NaN -10.247115  -0.156959
4 NaN  -1.018125  74.084838

协方差

协方差适用于Series数据。Series对象有一个方法cov用来计算序列对象之间的协方差。NA将被自动排除。
Cov系列示例

import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
print (s1.cov(s2))

执行上面示例代码,得到以下结果 –

0.529569917929239

当应用于DataFrame时,协方差方法计算所有列之间的协方差(cov)值。

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print (frame['a'].cov(frame['b']))
print (frame.cov())

执行上面示例代码,得到以下结果 –

-0.45404986040872625
          a         b         c         d         e
a  1.097219 -0.454050  0.220000 -0.042623  0.512828
b -0.454050  0.486687 -0.142435 -0.049252 -0.214837
c  0.220000 -0.142435  0.259743  0.085890  0.450370
d -0.042623 -0.049252  0.085890  0.702702 -0.028761
e  0.512828 -0.214837  0.450370 -0.028761  0.992702

注 – 观察第一个语句中ab列之间的cov结果值,与由DataFrame上的cov返回的值相同。

相关系数

相关系数显示了任何两个数值(Series)之间的线性关系。有多种方法来计算pearson(默认),spearmankendall之间的相关性。

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])

print (frame['a'].corr(frame['b']))
print (frame.corr()) # 默认method='pearson'

执行上面示例代码,得到以下结果 –

-0.18659310507001042
          a         b         c         d         e
a  1.000000 -0.186593 -0.305414  0.321063 -0.138488
b -0.186593  1.000000  0.255518 -0.347755 -0.371529
c -0.305414  0.255518  1.000000 -0.167094  0.568831
d  0.321063 -0.347755 -0.167094  1.000000  0.186296
e -0.138488 -0.371529  0.568831  0.186296  1.000000

如果DataFrame中存在任何非数字列,则会自动排除。

数据排名

数据排名为元素数组中的每个元素生成排名。在相同的情况下,分配平均等级。

import pandas as pd
import numpy as np
s = pd.Series(np.random.np.random.randn(5), index=list('abcde'))

s['d'] = s['b'] # so there's a tie

print (s.rank())

执行上面示例代码,得到以下结果 –

a    5.0
b    1.5
c    4.0
d    1.5
e    3.0
dtype: float64

rank 使用默认为true的升序参数(ascending=True), 当设置为false(ascending=True)时,数据按照降序排序。

rank支持不同的tie-breaking方法:

  • average – 默认值,相同数据分配平均数
  • min – 相同数据分配最小等级
  • max – 相同数据分配最大等级
  • first – 相同数据根据出现在数组的顺序分配等级

示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.np.random.randn(5), index=list('abcde'))

s['d'] = s['b'] # so there's a tie

print (s.rank(method='first'))

执行上面示例代码,得到以下结果 –

a    3.0
b    4.0
c    1.0
d    5.0
e    2.0
dtype: float64

学习笔记

更多统计函数参考如下表格:

函数 描述
count 非空数据的个数
sum 数据之和
mean 算术平均值
mad 平均绝对方差
median 中位数
min 最小值
max 最大值
mode 众数
abs 绝对值
prod 数组元素的乘积
std 标准差
var 方差
sem 标准误差
skew 偏差
kurt 样本值峰度
quantile 分位数
cumsum 累加
cumprod 累乘
cummax 累计最大值
cummin 累计最小值
cov() 协方差
corr() 相关系数
rank() 数据排名
pct_change() 计算百分数变化

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程