统计方法有助于理解和分析数据的行为。可以将这些统计函数应用到Pandas的对象上。
pct_change()函数
系列,DatFrames和Panel都有pct_change()
函数。此函数将每个元素与其前一个元素进行比较,并计算变化百分比。
import pandas as pd import numpy as np s = pd.Series([1,2,3,4,5]) print(s) print (s.pct_change()) print('\n') df = pd.DataFrame(np.random.randn(5, 2)) print(df) print (df.pct_change())
输出结果:
0 11 22 33 44 5dtype: int640 NaN1 1.0000002 0.5000003 0.3333334 0.250000dtype: float64 0 10 1.055808 1.3510571 1.458762 0.2293092 0.392842 -0.0432683 0.700352 0.8842584 0.120823 -0.329024 0 10 NaN NaN1 0.381654 -0.8302742 -0.730702 -1.1886863 0.782782 -21.4369894 -0.827482 -1.372090
默认情况下,pct_change()
对列进行操作; 如果想应用到行上,那么可使用axis = 1
参数。
协方差
协方差适用于系列数据。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.0667296739178
当应用于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.406796939839 a b c d e a 0.784886 -0.406797 0.181312 0.513549 -0.597385 b -0.406797 0.987106 -0.662898 -0.492781 0.388693 c 0.181312 -0.662898 1.450012 0.484724 -0.476961 d 0.513549 -0.492781 0.484724 1.571194 -0.365274 e -0.597385 0.388693 -0.476961 -0.365274 0.785044
注 - 观察第一个语句中
a
和b
列之间的cov
结果值,与由DataFrame上的cov
返回的值相同。
相关性
相关性显示了任何两个数值(系列)之间的线性关系。有多种方法来计算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) print('\n') print (frame.corr()) print('\n') print (frame['a'].corr(frame['b']))
输出结果:
a b c d e0 -1.101841 -0.074431 0.339134 1.259472 -0.3710681 0.360877 0.604059 0.276935 -2.151471 -0.1727152 -0.194507 -1.678110 -1.276085 0.810856 -0.0569593 0.937636 1.128184 0.284501 -0.455708 0.9130374 -0.316602 1.252087 -1.790787 -0.103062 0.0966545 0.796188 -0.771702 -0.921695 -0.403666 0.8489576 1.842859 0.015955 0.555579 0.166412 -0.1067797 -2.449436 -0.326649 0.023417 -1.440740 -1.0856058 0.716881 0.898661 1.880689 1.306625 -0.9088179 -0.312834 1.490284 -0.485538 0.176377 -1.153862 a b c d ea 1.000000 0.147945 0.226588 0.142235 0.523855b 0.147945 1.000000 0.244468 -0.096112 -0.177812c 0.226588 0.244468 1.000000 0.149294 -0.330628d 0.142235 -0.096112 0.149294 1.000000 -0.128328e 0.523855 -0.177812 -0.330628 -0.128328 1.0000000.14794498240798468
-0.613999376618
如果DataFrame中存在任何非数字列,则会自动排除。
数据排名
数据排名为元素数组中的每个元素生成排名。在关系的情况下,分配平均等级。
import pandas as pd import numpy as np s = pd.Series(np.random.randn(5), index=list('abcde')) print(s) print('\n') print (s.rank()) # 正常安装数值大小排名 print('\n') s['d'] = s['b'] # so there's a tie print(s) print('\n') print (s.rank())
输出结果:
a -1.076208b 0.869269c -1.302216d -0.772624e -0.290900dtype: float64a 2.0b 5.0c 1.0d 3.0e 4.0dtype: float64a -1.076208b 0.869269c -1.302216d 0.869269e -0.290900dtype: float64a 2.0b 4.5c 1.0d 4.5e 3.0dtype: float64
Rank
可选地使用一个默认为true
的升序参数; 当错误时,数据被反向排序,也就是较大的值被分配较小的排序。
Rank
支持不同的tie-breaking
方法,用方法参数指定 -
average
- 并列组平均排序等级min
- 组中最低的排序等级max
- 组中最高的排序等级first
- 按照它们出现在数组中的顺序分配队列