Pandas 統(tǒng)計(jì)函數(shù)的操作實(shí)例
統(tǒng)計(jì)方法有助于理解和分析數(shù)據(jù)的行為?,F(xiàn)在,我們將學(xué)習(xí)一些統(tǒng)計(jì)函數(shù),可以將它們應(yīng)用于Pandas對(duì)象。
Series,DatFrames和Panel都具有功能pct_change()。此函數(shù)將每個(gè)元素與其先前的元素進(jìn)行比較,并計(jì)算更改百分比。
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())
運(yùn)行結(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 -15.151902 0.174730 2 -0.746374 -1.449088 3 -3.582229 -3.165836 4 15.601150 -1.860434
默認(rèn)情況下,pct_change()對(duì)列進(jìn)行操作;如果要明智地應(yīng)用同一行,請(qǐng)使用axis = 1()參數(shù)。
協(xié)方差應(yīng)用于序列數(shù)據(jù)。系列對(duì)象具有方法cov來計(jì)算系列對(duì)象之間的協(xié)方差。NA將被自動(dòng)排除。
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))
運(yùn)行結(jié)果:
-0.12978405324
將協(xié)方差方法應(yīng)用于DataFrame時(shí),將計(jì)算所有列之間的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())
運(yùn)行結(jié)果:
-0.58312921152741437 a b c d e a 1.780628 -0.583129 -0.185575 0.003679 -0.136558 b -0.583129 1.297011 0.136530 -0.523719 0.251064 c -0.185575 0.136530 0.915227 -0.053881 -0.058926 d 0.003679 -0.523719 -0.053881 1.521426 -0.487694 e -0.136558 0.251064 -0.058926 -0.487694 0.960761
觀察第一條語句中a和b列之間的cov值,這與cov在DataFrame上返回的值相同。
相關(guān)性顯示任意兩個(gè)值數(shù)組(序列)之間的線性關(guān)系。有多種計(jì)算相關(guān)性的方法,例如pearson(默認(rèn)),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())
運(yùn)行結(jié)果:
-0.383712785514 a b c d e a 1.000000 -0.383713 -0.145368 0.002235 -0.104405 b -0.383713 1.000000 0.125311 -0.372821 0.224908 c -0.145368 0.125311 1.000000 -0.045661 -0.062840 d 0.002235 -0.372821 -0.045661 1.000000 -0.403380 e -0.104405 0.224908 -0.062840 -0.403380 1.000000
如果DataFrame中存在任何非數(shù)字列,則會(huì)自動(dòng)將其排除。
數(shù)據(jù)排名對(duì)元素?cái)?shù)組中的每個(gè)元素進(jìn)行排名。如果是平局,則分配平均排名。
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())
運(yùn)行結(jié)果:
a 1.0 b 3.5 c 2.0 d 3.5 e 5.0 dtype: float64
Rank可以選擇將參數(shù)升序,默認(rèn)情況下為true;如果為false,則對(duì)數(shù)據(jù)進(jìn)行反向排名,將較大的值分配為較小的排名。
Rank支持使用method參數(shù):
average ? 并列組的平均等級(jí)。 min ? 組中最低的排名。 max ? 組中最高等級(jí)。 first ? 行列分配在它們出現(xiàn)的數(shù)組中的順序。