Pandas統(tǒng)計函數(shù)

2022-07-13 17:01 更新

Pandas 的本質(zhì)是統(tǒng)計學(xué)原理在計算機(jī)領(lǐng)域的一種應(yīng)用實現(xiàn),通過編程的方式達(dá)到分析、描述數(shù)據(jù)的目的。而統(tǒng)計函數(shù)則是統(tǒng)計學(xué)中用于計算和分析數(shù)據(jù)的一種工具。在數(shù)據(jù)分析的過程中,使用統(tǒng)計函數(shù)有助于我們理解和分析數(shù)據(jù)。本節(jié)將學(xué)習(xí)幾個常見的統(tǒng)計函數(shù),比如百分比函數(shù)、協(xié)方差函數(shù)、相關(guān)系數(shù)等。

百分比變化(pct_change)

Series 和 DatFrames 都可以使用 pct_change() 函數(shù)。該函數(shù)將每個元素與其前一個元素進(jìn)行比較,并計算前后數(shù)值的百分比變化。示例如下:

import pandas as pd
import numpy as np
#Series結(jié)構(gòu)
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())

輸出結(jié)果:

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  74.779242   0.624260
2  -0.353652  -1.104352
3  -2.422813 -13.994103
4  -3.828316  -1.853092

默認(rèn)情況下,pct_change() 對列進(jìn)行操作,如果想要操作行,則需要傳遞參數(shù) axis=1 參數(shù)。示例如下:

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

輸出結(jié)果:

    0         1
0 NaN  3.035670
1 NaN -0.318259
2 NaN  0.227580

協(xié)方差(cov)

Series 對象提供了一個cov方法用來計算 Series 對象之間的協(xié)方差。同時,該方法也會將缺失值(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)
print(s2)
print (s1.cov(s2))

輸出結(jié)果:

0    1.640352

1    1.448355

2    0.545730

3    0.309628

4    0.557345

5    3.170734

6    0.976215

7   -0.223657

8    0.511220

9    1.696891

dtype: float64

0    0.990263

1    2.309879

2   -1.078195

3    1.835674

4   -0.121354

5    0.959632

6   -0.872707

7    1.879808

8    0.203775

9   -1.818213

dtype: float64

-0.09872075651634744

當(dāng)應(yīng)用于 DataFrame 時,協(xié)方差(cov)將計算所有列之間的協(xié)方差。

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
#計算a與b之間的協(xié)方差值
print (frame['a'].cov(frame['b']))
#計算所有數(shù)列的協(xié)方差值
print (frame.cov())

輸出結(jié)果:

-0.37822395480394827
          a         b         c         d         e
a  1.643529 -0.378224  0.181642  0.049969 -0.113700
b -0.378224  1.561760 -0.054868  0.144664 -0.231134
c  0.181642 -0.054868  0.628367 -0.125703  0.324442
d  0.049969  0.144664 -0.125703  0.480301 -0.388879
e -0.113700 -0.231134  0.324442 -0.388879  0.848377

相關(guān)系數(shù)(corr)

相關(guān)系數(shù)顯示任意兩個 Series 之間的線性關(guān)系。Pandas 提供了計算相關(guān)性的三種方法,分別是 pearson(default)、spearman() 和 kendall()。

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

輸出結(jié)果:

0.5540831507407936
          a         b         c         d         e
a  1.000000 -0.500903 -0.058497 -0.767226  0.218416
b -0.500903  1.000000 -0.091239  0.805388 -0.020172
c -0.058497 -0.091239  1.000000  0.115905  0.083969
d -0.767226  0.805388  0.115905  1.000000  0.015028
e  0.218416 -0.020172  0.083969  0.015028  1.000000

注意:如果 DataFrame 存在非數(shù)值(NAN),該方法會自動將其刪除。

排名(rank)

rank() 按照某種規(guī)則(升序或者降序)對序列中的元素值排名,該函數(shù)的返回值的也是一個序列,包含了原序列中每個元素值的名次。如果序列中包含兩個相同的的元素值,那么會為其分配兩者的平均排名。示例如下:

import pandas as pd
import numpy as np
#返回5個隨機(jī)值,然后使用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())

輸出結(jié)果:

a   -0.689585
b   -0.545871
c    0.148264
d   -0.545871
e   -0.205043
dtype: float64

排名后輸出:
a    1.0
b    2.5
c    5.0
d    2.5
e    4.0
dtype: float64

1) method參數(shù)

rank() 提供了 method 參數(shù),可以針對相同數(shù)據(jù),進(jìn)行不同方式的排名。如下所示:

  • average:默認(rèn)值,如果數(shù)據(jù)相同則分配平均排名;
  • min:給相同數(shù)據(jù)分配最低排名;
  • max:給相同數(shù)據(jù)分配最大排名;
  • first:對于相同數(shù)據(jù),根據(jù)出現(xiàn)在數(shù)組中的順序進(jìn)行排名。

2) aisx&ascening

rank() 有一個ascening參數(shù), 默認(rèn)為 True 代表升序;如果為 False,則表示降序排名(將較大的數(shù)值分配給較小的排名)。

rank() 默認(rèn)按行方向排名(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
#按行排名,將相同數(shù)值設(shè)置為所在行數(shù)值的最大排名
print(a.rank(axis=1,method="max"))

輸出結(jié)果:

     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"進(jìn)行對比,如下所示:


輸出結(jié)果:


     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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號