本章介绍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() |
计算百分数变化 |