python中的describe()

describe()

在Python中,describe 通常不是一个内置函数或方法,但它是数据分析中常用的一个术语,特别是在使用Pandas库进行数据处理时。Pandas库提供了一个名为 describe() 的方法,用于生成DataFrame或Series的摘要统计信息。

基本描述

describe() 方法为DataFrame或Series中的数值列生成描述性统计信息,默认包括:

  • 计数(count)
  • 平均值(mean)
  • 标准差(std)
  • 最小值(min)
  • 25%分位数(25%)
  • 50%分位数(即中位数,50%)
  • 75%分位数(75%)
  • 最大值(max)

对于对象类型(如字符串)或分类数据,describe() 方法默认会提供:

  • 计数(count)
  • 唯一值个数(unique)
  • 众数(top)
  • 众数出现的频率(freq)

使用示例

例子1:object

你可以使用以下代码来创建一个DataFrame并调用 describe() 方法:

import pandas as pd
 
# 创建一个示例DataFrame
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': ['a', 'b', 'c', 'a', 'b']
}
df = pd.DataFrame(data)
 
# 对数值列生成描述性统计信息
print(df.describe())
 
# 对对象类型列生成描述性统计信息
print(df.describe(include='object'))

对于数值列的描述性统计信息:

A          B
count  5.000000   5.000000
mean   3.000000  30.000000
std    1.581139  15.811390
min    1.000000  10.000000
25%    2.000000  20.000000
50%    3.000000  30.000000
75%    4.000000  40.000000
max    5.000000  50.000000

对于对象类型列的描述性统计信息:

C
count   5
unique  3
top     a
freq    2
例子2:all

使用include='all'的输出结果

import pandas as pd
import numpy as np
 
# 创建DataFrame
data = {
    'age': [23, 45, 56, np.nan, 78],
    'salary': [50000, 60000, 70000, 80000, 90000],
    'department': ['HR', 'Engineering', 'Marketing', 'Finance', 'Sales']
}
df = pd.DataFrame(data)
 
# 使用include='all'获取所有列的描述性统计信息
desc_all = df.describe(include='all')
print(desc_all)

输出结果可能如下(注意:由于实际输出可能会受到Pandas版本和显示设置的影响,以下输出是一个基于假设的示例):

age        salary department
count    4.000000      5.000000          5
unique         NaN           NaN          5
top            NaN           NaN    Finance
freq           NaN           NaN          1
mean    53.000000  70000.000000        NaN
std     21.602469  15811.388374        NaN
min     23.000000  50000.000000        NaN
25%     34.000000  60000.000000        NaN
50%     49.000000  70000.000000        NaN
75%     67.000000  80000.000000        NaN
max     78.000000  90000.000000        NaN

但是,上面的输出并不准确,因为unique, top, 和 freq 这些统计量对于数值列来说是没有意义的,而且它们被错误地放在了整个DataFrame的输出中。实际上,当使用include='all'时,Pandas会分别为数值列和对象列生成两个独立的描述性统计表,并将它们合并在一起,但合并的方式可能不是直接将统计量放在同一行和列中。正确的输出应该更像下面这样(注意:这是手动合并的结果,实际输出可能会有所不同):

数值列的描述性统计信息

age        salary
count    4.000000    5.000000
mean    53.000000  70000.00000
std     21.602469  15811.38837
min     23.000000  50000.00000
25%     34.000000  60000.00000
50%     49.000000  70000.00000
75%     67.000000  80000.00000
max     78.000000  90000.00000

对象列的描述性统计信息

department
count           5
unique          5
top      Finance
freq            1

这两个表通常不会直接合并成单个表格,而是分别显示,或者在某些情况下,可能会以不同的方式组织在一起。

例子3:

使用数据类型列表作为include参数的输出结果

如果你只想要数值列的描述性统计信息,可以这样做:

desc_numeric = df.describe(include=[np.number])
print(desc_numeric)

输出结果将只包含数值列(agesalary)的描述性统计信息,与上面数值列的描述性统计信息相同。

如果你想要同时获取数值列和对象列的描述性统计信息(尽管对象列的统计信息可能不是很有用),可以这样做:

python复制代码

desc_numeric_and_object = df.describe(include=[np.number, 'object'])
desc_numeric_and_object = df.describe(include=[np.number, 'object']

但是,请注意,这通常不是推荐的做法,因为对象列的统计信息对于数值分析来说通常不是很有用,而且可能会使输出结果变得混乱。在实际应用中,更常见的做法是分别获取数值列和对象列的描述性统计信息,并根据需要进行分析。

自定义 describe()

describe() 方法还允许你通过 percentiles 参数自定义分位数,通过 include 参数指定要包括的数据类型(如 allnumericobjectcategorical),以及通过 exclude 参数排除某些列。

例如,自定义分位数:

print(df.describe(percentiles=[.1, .9]))

这将生成包含10%和90%分位数的统计信息。

总之,Pandas的 describe() 方法是数据分析中非常有用的工具,可以快速获得数据的概览和统计信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值