Pandas:統計函式與apply
阿新 • • 發佈:2019-01-07
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