Pandas实现数据统计指标

前言
这篇文章主要复习一下用pandas库实现数据统计的一些方法,包括均值,上分位数,下分位数,以及缺失值的统计。

1.数据统计指令

1.1 求和指令

对于DataFrame中的数据,统计是基于无NAN数据(求和操作中,NAN相当于0),求和指令如下:

import pandas as pd
df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
                   [np.nan, np.nan], [0.75, -1.3]],
                  index=['a', 'b', 'c', 'd'],
                  columns=['one', 'two'])
df
df.sum() # 返回的是对于每一列数据和的Series数据
one 9.25
two -5.8

如果操作对象想转化为对每一行的数据进行求和操作,代码如下:

# 第一种表示方法
df.sum(axis = 1)
# 第二种表示方法
df.sum(axis = "columns")

1.2 均值指令

# 操作对象还是基于列
df.mean()
# 操作对象基于行
df.mean(axis = 1)
# 如果不想忽略NAN值,可以通过修改参数
df.mean(axis = 'columns', skipna = False)

1.3 返回最大(小)值的索引

df.idxmax() #返回每一列最大值的索引
df.idxmin() # 返回每一列最小值的索引

1.4 累积值统计

返回一个DataFrame, 是基于每一列的累加值返回

df.cumsum()

1.5 一次性产生多个数据统计

基于的对象还是DataFrame中的列

df.describe() # 可以一次性产生包括最小值,最大值,标准差等

2 计算相关系数和协方差

2.1 作用对象是Series

# 第一种表示方式
returns = pd.DataFrame([[1.5,1.6,1.7,1.8],
						[1.5,1.6,1.7,1.8],
						[1.5,1.6,1.7,1.8],
						[1.5,1.6,1.7,1.8]],
						index = ['a','b','c','d'], 
						columns = ['A','B','C','D'])
# 相关系数计算
returns['A'].corr(returns['B'])

# 协方差计算
returns['A'].cov(returns['B'])
# 第二种表示方式
returns.A.cov(returns.B)

2.2 作用对象是DataFrame

返回一个完整的DataFrame的协方差(相关系数)矩阵。

returns.cov() # 协方差矩阵
returns.corr() # 相关系数矩阵

corrwith()方法用于计算 DataFrame 和 Series 之间的相关系数。

# 这里DataFrame中的对象是列
returns.corrwith(returns.B)
# 改变作用对象为DataFrame中的行,与corrwith()中的Series进行相关系数计算
returns.corrwith(returns.B, axis = 1)

3 唯一值,统计频次

3.1 获取唯一值

有点类似于集合(在我的世界里,你就是唯一)。

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

3.2 统计数值频次

作用对象是Series, value_counts()中数据的维度必须是1,所以无法统计DataFrame。统计DataFrame中出现的频次使用的是apply函数。

obj.value_counts() # 出现的频次由高到低进行排序
# 也可以对值的字母顺序进行排序
pd.value_counts(obj.values, sort = False)

3.3 对数据进行过滤

操作对象为 Series 和 DataFrame 中的列。

obj2 = obj.isin(['b', 'c']) #返回布尔值的Series
obj[obj2] # 筛选出了元素为 'b','c'的Series

3.4 apply函数

对DataFrame中的数据频次进行统计。

data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],
                     'Qu2': [2, 3, 1, 2, 3],
                     'Qu3': [1, 5, 2, 4, 4]})
result = data.apply(pd.value_counts).fillna(0)

猜你喜欢

转载自blog.csdn.net/weixin_43226196/article/details/107617586
今日推荐