首页Python9.Pandas中描述性统...

9.Pandas中描述性统计计算

1.汇总统计及相关方法:

Pandas包含了一些常用数学、统计学的方法,其中大部分属于归约或汇总统计的类别。

  • 归约方法
df = pd.DataFrame([[1.8,np.nan],[7.7,-5.5],[np.nan,np.nan],[0.9,-1.5]],index=['a','b','c','d'],columns=['one','two'])

df
Out[6]: 
   one  two
a  1.8  NaN
b  7.7 -5.5
c  NaN  NaN
d  0.9 -1.5

df.sum()
Out[7]: 
one    10.4
two    -7.0
dtype: float64

df.sum(axis=1)
Out[8]: 
a    1.8
b    2.2
c    0.0
d   -0.6
dtype: float64

df.sum(axis='columns')
Out[9]: 
a    1.8
b    2.2
c    0.0
d   -0.6
dtype: float64

因为内建了处理缺失值的功能,除非整个切片全是NaN,否则NaN值会自动被排除掉。
通过设置skipna属性可实现不排除NaN值。

df.sum(axis='columns',skipna=False)
Out[10]: 
a    NaN
b    2.2
c    NaN
d   -0.6
dtype: float64

另外的一些方法返回的是间接地统计信息,例如idxminidxmax方法返回的是最小值和最大值的索引值。

df.idxmin()
Out[11]: 
one    d
two    b
dtype: object

df.idxmax()
Out[12]: 
one    b
two    d
dtype: object
  • 积累型方法

除了归约型方法还有积累型方法,例如计算累加值的cumsum()方法。

df = pd.DataFrame([[1.8,np.nan],[7.7,-5.5],[np.nan,np.nan],[0.9,-1.5]],index=['a','b','c','d'],columns=['one','two'])

df
Out[14]: 
   one  two
a  1.8  NaN
b  7.7 -5.5
c  NaN  NaN
d  0.9 -1.5

df.cumsum()
Out[15]: 
    one  two
a   1.8  NaN
b   9.5 -5.5
c   NaN  NaN
d  10.4 -7.0
  • 其他方法

还有一些既不是归约方法也不是积累型方法,例如describe()方法可以一次性产生多个汇总统计。

df.describe()
Out[16]: 
            one       two
count  3.000000  2.000000
mean   3.466667 -3.500000
std    3.693688  2.828427
min    0.900000 -5.500000
25%    1.350000 -4.500000
50%    1.800000 -3.500000
75%    4.750000 -2.500000
max    7.700000 -1.500000
  • 汇总统计及相关方法列表:
方法说明
count非NaN值的个数
describe计算各列的汇总统计集合
min、max计算最小值、最大值
argmin、argmax计算最小值、最大值所在的索引位置
idxmin、idxmax计算最小值、最大值所在的索引标签
quantile计算样本的从0到1间的分位数
sum加和
mean均值
median中位数
mad平均值的平均绝对偏差
prob所有值的积
var值的样本方差
std值的样本标准差
skew样本偏度(第三时刻)值
kurt样本峰度(第四时刻)值
cumsum值的累计和
cummin、cummax累计和的最小值、最大值
cumprob值的累计积
diff计算第一个算术差值(对时间序列有效)
pct_change计算百分比
corr计算相关性
cov计算协方差

2.唯一值、计数及成员属性:

  • unique()方法

unique()方法会给出Series中的唯一值。返回的唯一值顺序为随机的,如果需要排序需使用之前介绍的sort()方法。

s = pd.Series(['a','c','a','d','a','b','b','c','c'])

s
Out[18]: 
0    a
1    c
2    a
3    d
4    a
5    b
6    b
7    c
8    c
dtype: object

s.unique()
Out[19]: array(['a', 'c', 'd', 'b'], dtype=object)

value_counts()方法用于计算Series中包含的值的个数。返回值会按照数量进行降序排列。

s.value_counts()
Out[20]: 
a    3
c    3
b    2
d    1
dtype: int64

value_counts()方法也是有效的pandas顶层方法,可以用于任意数组或序列。

pd.value_counts(s.values,sort=False)
Out[21]: 
c    3
a    3
b    2
d    1
dtype: int64
  • isin()方法

isin()方法用于执行向量化的成员属性检查,还可以将数据集以Series或DataFrame一列的详实过滤为数据集的值子集。

s
Out[23]: 
0    a
1    c
2    a
3    d
4    a
5    b
6    b
7    c
8    c
dtype: object

mask = s.isin(['b','c'])

mask
Out[25]: 
0    False
1     True
2    False
3    False
4    False
5     True
6     True
7     True
8     True
dtype: bool

s[mask]
Out[26]: 
1    c
5    b
6    b
7    c
8    c
dtype: object

Index.get_indexer()方法可以提供一个索引数组,这个索引数组可以将非唯一数组转换为另一个非唯一值的数组(根据提供的索引数组的索引值)。

s
Out[27]: 
0    a
1    c
2    a
3    d
4    a
5    b
6    b
7    c
8    c
dtype: object

unique_s = pd.Series(['a','b','c'])

pd.Index(unique_s).get_indexer(s)
Out[29]: array([ 0,  2,  0, -1,  0,  1,  1,  2,  2], dtype=int64)
  • DataFrame数据类型的相关计算

可以将上述的方法传入之前介绍的apply()方法中。

df = pd.DataFrame({'列1':[1,3,4,3,4],'列2':[2,3,1,2,3],'列3':[1,5,2,4,4]})

df
Out[34]: 
   列1  列2  列3
0   1   2   1
1   3   3   5
2   4   1   2
3   3   2   4
4   4   3   4

df.apply(pd.value_counts)
Out[38]: 
    列1   列2   列3
1  1.0  1.0  1.0
2  NaN  2.0  1.0
3  2.0  2.0  NaN
4  2.0  NaN  2.0
5  NaN  NaN  1.0

df.apply(pd.value_counts).fillna(0)
Out[37]: 
    列1   列2   列3
1  1.0  1.0  1.0
2  0.0  2.0  1.0
3  2.0  2.0  0.0
4  2.0  0.0  2.0
5  0.0  0.0  1.0
  • 唯一值、计数和集合成员属性方法
方法说明
isin计算Series中每个值是否包含在传入序列中
match计算数组中每个值的整数索引,形成一个唯一值数组,有助于数据的对齐和join类型的操作
unique计算Series值的唯一值数组,按照观察顺序返回
value_counts返回一个Series,索引时唯一值序列,值是计数个数,并按照个数数量降序排列

Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments