Pandas.DataFrame.describe() 统计学描述 详解 含代码 含测试数据集 随Pandas版本持续更新

发布时间:2024年01月19日

关于Pandas版本: 本文基于 pandas2.1.2 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。

Pandas API参考所有内容目录

Pandas.DataFrame.describe()

Pandas.DataFrame.describe 用于生成 DataFrameSeries 的统计学描述。返回一个有多行的所有数字列的统计表,每一行对应一个统计指标,有总数、平均数、标准差、最小值、四分位数、最大值等,参与统计描述的列,里面的缺失值(NaN),会在计算时被排除

语法:

DataFrame.describe(percentiles=None, include=None, exclude=None)

返回值:

  • Series or DataFrame

    调用 DataFrame.describe 方法时,根据传入类型的不同,返回 SeriesDataFrame

参数说明:

include 数据类型白名单

  • include : ‘all’, list-like of dtypes or None (default), optional

    include 参数,用于指定要包括在结果中的数据类型白名单。如果某列的数据类型出现在白名单中,此列将参与统计描述。

    默认 include=None 表示只有数字类型(numpy.number) 的列参与统计描述: Pandas Numpy 数据类型速查表

    • None: 默认 include=None ,仅 数字类型(numpy.number) 的列,参与统计描述。例1
    • ‘all’: 所有数据类型的列,都参与统计描述; 例1-3
    • list-like of dtypes: 使用 类似列表 传递需要参与统计描述的数据类型,符合这些数据类型的列,会参与统计描述。例1-4

    ?? 注意 :

    • 对于 Series,此参数无效!

    • 可以使用 numpy.number 来包含数值类型的列 Pandas Numpy 数据类型速查表

    • 使用 numpy.object 来包含混合类型的列。也可以使用字符串的方式,类似于 df.describe(include=['O'])

    • 选择 pandas 的分类列,请使用 'category'

    • includeexclude 可以混用 例2-2

exclude 数据类型黑名单

  • exclude : list-like of dtypes or None (default), optional,

    exclude 参数,用于指定要排除的数据类型白名单。如果某列的数据类型出现在黑名单中,此列将不会参与统计描述。

    默认 exclude=None 表示不做排除:

    • list-like of dtypes: 使用 类似列表 传递需要排除的数据类型,这些数据类型的列,不会参与统计描述。例2

    ?? 注意 :

    • 对于 Series,此参数无效!

    • 可以使用 numpy.number 来排除数值类型的列 Pandas Numpy 数据类型速查表

    • 使用 numpy.object 来排除混合类型的列。也可以使用字符串的方式,类似于 df.describe(include=['O'])

    • 排除 pandas 的分类列,请使用 'category'

    • includeexclude 可以混用 例2-2

percentiles 自定义百分位数

  • percentiles : *list-like of numbers, optional

    percentiles 参数用于自定义 百分位数

    • list-like:类似列表 传递自定义的 百分位数 ,列表里每个元素都应该介于0-1之间,默认状态下,百分数只会返回 [0.25, 0.5, 0.75] (即第1~3四分位数)。

    ?? 注意 :

    你可以指定多个百分位数。例3

?? 注意 :

  • 对于数值数据(numeric data),结果的索引将包括 countmeanstdminmax,以及 lower50upper 百分位数。默认情况下,lower 百分位数是 25upper 百分位数是 7550 百分位 数与 中位数 相同。

  • 对于对象数据(object data),例如字符串或时间戳,结果的索引将包括 countuniquetopfreqtop 是最常见的值,freq 是最常见值的频率。时间戳还包括第一个最后一个项。

  • 如果多个对象值具有最高计数,则计数和 top 的结果将从具有最高计数的值中任意选择。

  • 对于通过 DataFrame 提供的混合数据类型(),默认情况下仅返回数值列的分析结果。如果 DataFrame 仅包含对象(‘object’)和分类数据(‘category’)而没有任何数值列,则默认情况下将返回对对象(‘object’)和分类数据(‘category’)列的分析结果。如果提供了 include=‘all’ 作为选项,则结果将包括每种类型的属性的并集。

  • includeexclude 参数可用于限制要分析的 DataFrame 中的列。在分析 Series 时,这些参数将被忽略。

相关方法:

?? 相关方法


示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png

例1:默认情况下,统计描述只有数据类型为数字类型(numpy.number)的列参与。

例1-1、构建演示数据,并观察数据内容
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
0d1a
1e2b
2f3c

再来观察一下数据类型,为了方便观察,使用to_frame() 转换为表格样式:

df.dtypes.to_frame()
0
分类category
数字int64
objectobject
例1-2、尝试进行统计描述,所有参数保持默认,看一下结果
df.describe()
数字
count3.0
mean2.0
std1.0
min1.0
25%1.5
50%2.0
75%2.5
max3.0

由上面结果可见,在统计描述的结果中,只包含了 数字 这一列的统计描述。因为这一列的数据类型是 int64numpy.number 数字类型的子类。这符合 df.describe() 的默认行为

例1-3:设置参数 include='all' ,所有数据类型的列,将全都参与统计描述。但是对于无法进行计算的项目,将显示为缺失值(NaN)。例如字符串类型的数据,无法进行平均值计算(mean)。
df.describe(include="all")
分类数字object
count33.03
unique3NaN3
topdNaNa
freq1NaN1
meanNaN2.0NaN
stdNaN1.0NaN
minNaN1.0NaN
25%NaN1.5NaN
50%NaN2.0NaN
75%NaN2.5NaN
maxNaN3.0NaN

例1-4: 指定符合要求的数据类型的列参与统计描述
df.describe(include=[np.number, "category"])
分类数字
count33.0
unique3NaN
topdNaN
freq1NaN
meanNaN2.0
stdNaN1.0
minNaN1.0
25%NaN1.5
50%NaN2.0
75%NaN2.5
maxNaN3.0

例2:通过 exclude 参数,排除某些数据类型的列

例2-1、依然使用例1的数据内容,我们来排除数字类型的列,看下结果
df.describe(exclude=[np.number])
分类object
count33
unique33
topda
freq11

例2-2、includeexclude 混用
df.describe(include=["category"], exclude=[np.number])
分类
count3
unique3
topd
freq1

例3:自定义百分位数

df.describe(include=[np.number], percentiles=[0.1, 0.4, 0.7, 0.8, 0.85])
数字
count3.0
mean2.0
std1.0
min1.0
10%1.2
40%1.8
50%2.0
70%2.4
80%2.6
85%2.7
max3.0
文章来源:https://blog.csdn.net/mingqinsky/article/details/135697384
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。