pandas提供了一些实用方法可以让我们快速获得DataFrame的描述性信息,下表总结了可以获得的描述性统计信息,本文将重点讲解几个描述性统计的功能
序号 | 方法 | 说明 |
---|---|---|
1 | count() | 非空观测值的数量 |
2 | sum() | 值的总和 |
3 | mean() | 平均值 |
4 | median() | 中间值 |
5 | mode() | 模式 |
6 | std() | 标准差 |
7 | min() | 最小值 |
8 | max() | 最大值 |
9 | abs() | 绝对值 |
10 | prod() | 不同维度上的乘积 |
11 | cumsum() | 累计和 |
12 | cumprod() | 累积产品 |
13 | describe() | 数据帧列的统计信息的摘要 |
DataFrame既有行也有列,因此sum求和时需要指定按行求和还是按列求和,本文所有示例代码统一使用下面这份数据
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.columns.name = '科目'
print(df.sum(axis=0)) # 按列求和
print("*"*20)
print(df.sum(axis=1)) # 按行求和
程序输出结果
科目
数学 367
语文 365
dtype: int64
********************
姓名
小明 182
小红 185
小刚 177
小丽 188
dtype: int64
DataFrame的mean方法可以计算行和里的平均值
print(df.mean(axis=0)) # 按列求均值
print("*"*20)
print(df.mean(axis=1)) # 按行求均值
程序输出结果
科目
数学 91.75
语文 91.25
dtype: float64
********************
姓名
小明 91.0
小红 92.5
小刚 88.5
小丽 94.0
dtype: float64
DataFrame的median方法可以计算行与列的中间值
print(df.median(axis=0)) # 按列求中间值
print("*"*20)
print(df.median(axis=1)) # 按行求中间值
程序输出结果
科目
数学 91.75
语文 91.25
dtype: float64
********************
姓名
小明 91.0
小红 92.5
小刚 88.5
小丽 94.0
dtype: float64
DataFrame的std方法可以计算行与列的标准差
print(df.std(axis=0)) # 按列求标准差
print("*"*20)
print(df.std(axis=1)) # 按行求标准差
程序输出结果
科目
数学 4.645787
语文 4.716991
dtype: float64
********************
姓名
小明 1.414214
小红 7.778175
小刚 2.121320
小丽 5.656854
dtype: float64
DataFrame的min和max分别可以计算行列的最小值和最大值
print(df.min(axis=0)) # 按列求最小值
print("*"*20)
print(df.min(axis=1)) # 按行求最小值
print("*"*20)
print(df.max(axis=0)) # 按列求最大值
print("*"*20)
print(df.max(axis=1)) # 按行求最大值
程序输出结果
科目
数学 87
语文 87
dtype: int64
********************
姓名
小明 90
小红 87
小刚 87
小丽 90
dtype: int64
********************
科目
数学 98
语文 98
dtype: int64
********************
姓名
小明 92
小红 98
小刚 90
小丽 98
dtype: int64
DataFrame的abs方法可以将负数转为正数
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': -87},
{'语文': 87, '数学': 90},
{'语文': -90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.columns.name = '科目'
print(type(df.abs()))
分数里出现了负数,abs将所有数值转为绝对值
print(df.describe())
程序输出结果
科目 数学 语文
count 4.000000 4.000000
mean 91.750000 91.250000
std 4.645787 4.716991
min 87.000000 87.000000
25% 89.250000 89.250000
50% 91.000000 90.000000
75% 93.500000 92.000000
max 98.000000 98.000000
DataFrame的describe() 函数计算关于所述数据帧列的统计信息的摘要
QQ交流群: 211426309