1. 程式人生 > >Pandas:統計函式與apply

Pandas:統計函式與apply

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

一、統計函式

方法 說明
count 非NA值的數量
describe 針對Series或各DataFrame列計算彙總統計
min、max 計算最小值和最大值
argmin、argmax 計算能夠獲取到最小值和最大值的索引位置
idxmin、idxmax 計算能夠獲取到最小值和最大值的索引值
quantile 計算樣本的分位數
sum 值的總和
mean 值的平均數
median 值的算術中位數
mad 根據平均值計算平均絕對離差
var 樣本值的方差
std 樣本值的標準差
skew 樣本值的偏度
kurt 樣本值的峰度
cumsum 樣本值的累計和
cummin、cummax 樣本值的累計最大值和累計最小值
cumprod 樣本值的累計積
diff 計算一階差分
pct_change 計算百分數變化

二、Pandas中的統計函式都是基於沒有缺失資料的

三、sum、idxmax、cumsum、describe

df = DataFrame([[1.4,np.nan],[7.1,-4.5],
              [np.nan,np.nan],[0.75,-1.3]],
              index = ['a','b','c','d'],
              columns = [1,2])
print(df)
      1    2
a  1.40  NaN
b  7.10 -4.5
c   NaN  NaN
d  0.75 -1.3

1.sum

df.sum() # 行求和
1    9.25
2   -5.80
dtype: float64
df.sum(axis=1
) # 列求和
a    1.40
b    2.60
c    0.00
d   -0.55
dtype: float64
df.sum(skipna=False) # 不忽略NaN值
1   NaN
2   NaN
dtype: float64

2.idxmax:返回列值中最大元素的行索引(axis=0)

df.idxmax()
1    b
2    d
dtype: object

3.cumsum:累加

print(df.cumsum())
      1    2
a  1.40  NaN
b  8.50 -4.5
c   NaN  NaN
d  9.25 -5.8

4.describe:統計描述

print(df.describe()) # 按列
              1         2
count  3.000000  2.000000
mean   3.083333 -2.900000
std    3.493685  2.262742
min    0.750000 -4.500000
25%    1.075000 -3.700000
50%    1.400000 -2.900000
75%    4.250000 -2.100000
max    7.100000 -1.300000

三、相關係數與協方差

1.Series

s1 = Series([1,3,5,6,9])
s2 = Series([2,3,4,6,9])

計算兩個Series中重疊的、非NA的,按索引對齊的值的協方差

s1.cov(s2)
8.1999999999999993

計算相關係數

s1.corr(s2)
0.974259335869603

2.DataFrame

df = DataFrame(np.random.rand(9).reshape(3,3),index=['a','b','c'],columns=['e','f','g'])
print(df)
          e         f         g
a  0.146858  0.129654  0.904029
b  0.914438  0.698205  0.970205
c  0.041829  0.938332  0.823483

計算列的協方差矩陣

print(df.cov())
          e         f         g
e  0.226943  0.023656  0.031214
f  0.023656  0.172479 -0.010457
g  0.031214 -0.010457  0.005399

計算列的相關係數

print(df.corr())
          e         f         g
e  1.000000  0.119568  0.891737
f  0.119568  1.000000 -0.342684
g  0.891737 -0.342684  1.000000

四、唯一值、值計數和成員資格

1.唯一值

o = Series(['a','b','a','c','d','c'])
o.unique()
array(['a', 'b', 'c', 'd'], dtype=object)

2.值計數

o.value_counts()
c    2
a    2
d    1
b    1
dtype: int64

3.成員資格

o.isin(['a','b'])
0     True
1     True
2     True
3    False
4    False
5    False
dtype: bool

五、函式應用(apply)

使用DataFrame的apply方法可以實現將函式應用到由各列或行所形成的一維陣列上

1.在列上apply單個函式

f = lambda x:x.max()-x.min() # 極差函式
df.apply(f) # 按列求極差
e    0.872609
f    0.808678
g    0.146722
dtype: float64

2.在行上apply單個函式

df.apply(f,axis=1)
a    0.774375
b    0.272000
c    0.896503
dtype: float64

3.在元素上applymap函式

format = lambda x:'%.2f'%x # 格式化函式
print(df.applymap(format))
      e     f     g
a  0.15  0.13  0.90
b  0.91  0.70  0.97
c  0.04  0.94  0.82

4.在列上apply多個函式

f1 = lambda x:x.max()-x.min()
f2 = lambda x:x.mean()
def f(x):
    return Series([f1(x),f2(x)],index=['range','mean']) # Series中的值是實際的函式,索引是該函式返回值的標籤
print(df.apply(f))
              e         f         g
range  0.872609  0.808678  0.146722
mean   0.367709  0.588730  0.899239