关于Pandas版本: 本文基于 pandas2.1.2 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。
Pandas.DataFrame.describe
用于生成 DataFrame
或 Series
的统计学描述。返回一个有多行的所有数字列的统计表,每一行对应一个统计指标,有总数、平均数、标准差、最小值、四分位数、最大值等,参与统计描述的列,里面的缺失值(NaN
),会在计算时被排除。
DataFrame.describe(percentiles=None, include=None, exclude=None)
Series or DataFrame
调用 DataFrame.describe
方法时,根据传入类型的不同,返回 Series
或 DataFrame
。
include : ‘all’, list-like of dtypes or None (default), optional
include
参数,用于指定要包括在结果中的数据类型白名单。如果某列的数据类型出现在白名单中,此列将参与统计描述。
默认 include=None
表示只有数字类型(numpy.number
) 的列参与统计描述: Pandas Numpy 数据类型速查表
include=None
,仅 数字类型(numpy.number
) 的列,参与统计描述。例1?? 注意 :
对于
Series
,此参数无效!可以使用
numpy.number
来包含数值类型的列 Pandas Numpy 数据类型速查表使用
numpy.object
来包含混合类型的列。也可以使用字符串的方式,类似于df.describe(include=['O'])
。选择
pandas
的分类列,请使用'category'
。
include
和exclude
可以混用 例2-2
exclude : list-like of dtypes or None (default), optional,
exclude
参数,用于指定要排除的数据类型白名单。如果某列的数据类型出现在黑名单中,此列将不会参与统计描述。
默认 exclude=None
表示不做排除:
?? 注意 :
对于
Series
,此参数无效!可以使用
numpy.number
来排除数值类型的列 Pandas Numpy 数据类型速查表使用
numpy.object
来排除混合类型的列。也可以使用字符串的方式,类似于df.describe(include=['O'])
。排除
pandas
的分类列,请使用'category'
。
include
和exclude
可以混用 例2-2
percentiles : *list-like of numbers, optional
percentiles
参数用于自定义 百分位数
:
百分位数
,列表里每个元素都应该介于0-1之间,默认状态下,百分数只会返回 [0.25, 0.5, 0.75]
(即第1~3四分位数)。?? 注意 :
你可以指定多个百分位数。例3
?? 注意 :
对于数值数据(numeric data),结果的索引将包括
count
、mean
、std
、min
、max
,以及lower
、50
和upper
百分位数。默认情况下,lower
百分位数是25
,upper
百分位数是75
。50 百分位
数与中位数
相同。对于对象数据(object data),例如字符串或时间戳,结果的索引将包括
count
、unique
、top
和freq
。top
是最常见的值,freq
是最常见值的频率。时间戳还包括第一个
和最后一个
项。如果多个对象值具有最高计数,则计数和
top
的结果将从具有最高计数的值中任意选择。对于通过
DataFrame
提供的混合数据类型(),默认情况下仅返回数值列的分析结果。如果DataFrame
仅包含对象(‘object’)和分类数据(‘category’)而没有任何数值列,则默认情况下将返回对对象(‘object’)和分类数据(‘category’)列的分析结果。如果提供了 include=‘all’ 作为选项,则结果将包括每种类型的属性的并集。
include
和exclude
参数可用于限制要分析的DataFrame
中的列。在分析Series
时,这些参数将被忽略。
?? 相关方法
Count number of non-NA/null observations.
Maximum of the values in the object.
Minimum of the values in the object.
Mean of the values.
Standard deviation of the observations.
根据数据类型筛选列。
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
numpy.number
)的列参与。import numpy as np
import pandas as pd
# 构建演示数据
df = pd.DataFrame(
{"分类": pd.Categorical(["d", "e", "f"]), "数字": [1, 2, 3], "object": ["a", "b", "c"]}
)
df
分类 | 数字 | object | |
---|---|---|---|
0 | d | 1 | a |
1 | e | 2 | b |
2 | f | 3 | c |
再来观察一下数据类型,为了方便观察,使用to_frame()
转换为表格样式:
df.dtypes.to_frame()
0 | |
---|---|
分类 | category |
数字 | int64 |
object | object |
df.describe()
数字 | |
---|---|
count | 3.0 |
mean | 2.0 |
std | 1.0 |
min | 1.0 |
25% | 1.5 |
50% | 2.0 |
75% | 2.5 |
max | 3.0 |
由上面结果可见,在统计描述的结果中,只包含了 数字 这一列的统计描述。因为这一列的数据类型是 int64
是 numpy.number
数字类型的子类。这符合 df.describe()
的默认行为
include='all'
,所有数据类型的列,将全都参与统计描述。但是对于无法进行计算的项目,将显示为缺失值(NaN
)。例如字符串类型的数据,无法进行平均值计算(mean)。df.describe(include="all")
分类 | 数字 | object | |
---|---|---|---|
count | 3 | 3.0 | 3 |
unique | 3 | NaN | 3 |
top | d | NaN | a |
freq | 1 | NaN | 1 |
mean | NaN | 2.0 | NaN |
std | NaN | 1.0 | NaN |
min | NaN | 1.0 | NaN |
25% | NaN | 1.5 | NaN |
50% | NaN | 2.0 | NaN |
75% | NaN | 2.5 | NaN |
max | NaN | 3.0 | NaN |
df.describe(include=[np.number, "category"])
分类 | 数字 | |
---|---|---|
count | 3 | 3.0 |
unique | 3 | NaN |
top | d | NaN |
freq | 1 | NaN |
mean | NaN | 2.0 |
std | NaN | 1.0 |
min | NaN | 1.0 |
25% | NaN | 1.5 |
50% | NaN | 2.0 |
75% | NaN | 2.5 |
max | NaN | 3.0 |
exclude
参数,排除某些数据类型的列df.describe(exclude=[np.number])
分类 | object | |
---|---|---|
count | 3 | 3 |
unique | 3 | 3 |
top | d | a |
freq | 1 | 1 |
include
和 exclude
混用df.describe(include=["category"], exclude=[np.number])
分类 | |
---|---|
count | 3 |
unique | 3 |
top | d |
freq | 1 |
df.describe(include=[np.number], percentiles=[0.1, 0.4, 0.7, 0.8, 0.85])
数字 | |
---|---|
count | 3.0 |
mean | 2.0 |
std | 1.0 |
min | 1.0 |
10% | 1.2 |
40% | 1.8 |
50% | 2.0 |
70% | 2.4 |
80% | 2.6 |
85% | 2.7 |
max | 3.0 |