14-Python Pandas统计函数

Python Pandas统计函数

Pandas 的本质是统计学原理在计算机领域的一种应用实现,通过编程的方式达到分析、描述数据的目的。而统计函数则是统计学中用于计算和分析数据的一种工具。在数据分析的过程中,使用统计函数有助于我们理解和分析数据。本节将学习几个常见的统计函数,比如百分比函数、协方差函数、相关系数等。

百分比变化(pct_change)

Series 和 DatFrames 都可以使用 pct_change() 函数。该函数将每个元素与其前一个元素进行比较,并计算前后数值的百分比变化。示例如下:

import pandas as pd
import numpy as np
#Series结构
s = pd.Series([1,2,3,4,5,4])
print (s.pct_change())
#DataFrame
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  -1.801231 -0.413387
2  38.142642 -1.235676
3  -6.792933 -8.651601
4  -1.408651 -1.155978

默认情况下,pct_change() 对列进行操作,如果想要操作行,则需要传递参数 axis=1 参数。示例如下:

import pandas as pd
import numpy as np
#DataFrame
df = pd.DataFrame(np.random.randn(3, 2))
print(df.pct_change(axis=1))

输出结果:

    0         1
0 NaN  0.195206
1 NaN -2.024320
2 NaN  0.422153

协方差(cov)

Series 对象提供了一个cov方法用来计算 Series 对象之间的协方差。同时,该方法也会将缺失值(NAN )自动排除。

示例如下:

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.0009392944852922599

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

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
#计算a与b之间的协方差值
print (frame['a'].cov(frame['b']))
#计算所有数列的协方差值
print (frame.cov())

输出结果:

-0.6227789508310156
          a         b         c         d         e
a  1.417495 -0.622779 -0.422152 -0.426196 -0.546001
b -0.622779  0.992809  0.536328  0.300780  0.229373
c -0.422152  0.536328  1.297372  0.233159 -0.350750
d -0.426196  0.300780  0.233159  0.677037  0.008460
e -0.546001  0.229373 -0.350750  0.008460  1.225749

相关系数(corr)

相关系数显示任意两个 Series 之间的线性关系。Pandas 提供了计算相关性的三种方法,分别是 pearson(default)、spearman() 和 kendall()。

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

输出结果:

-0.2742706043276069
          a         b         c         d         e
a  1.000000 -0.342040  0.373092  0.377622  0.092195
b -0.342040  1.000000 -0.707675 -0.167543  0.237425
c  0.373092 -0.707675  1.000000  0.072703 -0.381545
d  0.377622 -0.167543  0.072703  1.000000 -0.480782
e  0.092195  0.237425 -0.381545 -0.480782  1.000000

注意:如果 DataFrame 存在非数值(NAN),该方法会自动将其删除。

排名(rank)

rank() 按照某种规则(升序或者降序)对序列中的元素值排名,该函数的返回值的也是一个序列,包含了原序列中每个元素值的名次。如果序列中包含两个相同的的元素值,那么会为其分配两者的平均排名。示例如下:

import pandas as pd
import numpy as np
#返回5个随机值,然后使用rank对其排名
s = pd.Series(np.random.randn(5), index=list('abcde'))
s['d'] = s['b']
print(s) 
#a/b排名分别为2和3,其平均排名为2.5
print(s.rank())

输出结果:

a    1.912667
b    1.028540
c   -0.540133
d    1.028540
e    1.065688
dtype: float64
a    5.0
b    2.5
c    1.0
d    2.5
e    4.0
dtype: float64
1) method参数

rank() 提供了 method 参数,可以针对相同数据,进行不同方式的排名。如下所示:

  • average:默认值,如果数据相同则分配平均排名;
  • min:给相同数据分配最低排名;
  • max:给相同数据分配最大排名;
  • first:对于相同数据,根据出现在数组中的顺序进行排名。
2) aisx&ascening

rank() 有一个ascening参数, 默认为 True 代表升序;如果为 False,则表示降序排名(将较大的数值分配给较小的排名)。

rank() 默认按行方向排名(axis=0),也可以更改为 axis =1,按列排名。示例如下:

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(12).reshape(3,4),columns = list("abdc"))
a =a.sort_index(axis=1,ascending=False)
a.iloc[[1,1],[1,2]] = 6
#按行排名,将相同数值设置为所在行数值的最大排名
print(a.rank(axis=1,method="max"))

输出结果:

     d    c    b    a
0  3.0  4.0  2.0  1.0
1  4.0  4.0  4.0  1.0
2  3.0  4.0  2.0  1.0

与 method="min"进行对比,如下所示:

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(12).reshape(3,4),columns = list("abdc"))
a =a.sort_index(axis=1,ascending=False)
a.iloc[[1,1],[1,2]] = 6
#按行排名,将相同数值设置为所在行数值的最小排名
print(a.rank(axis=1,method="min"))

输出结果:

     d    c    b    a
0  3.0  4.0  2.0  1.0
1  2.0  2.0  2.0  1.0
2  3.0  4.0  2.0  1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值