本章介绍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
注 – 观察第一个语句中
a和b列之间的cov结果值,与由DataFrame上的cov返回的值相同。
相关系数
相关系数显示了任何两个数值(Series)之间的线性关系。有多种方法来计算pearson(默认),spearman和kendall之间的相关性。
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() | 
计算百分数变化 | 
极客教程