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)
输出结果将只包含数值列(age
和salary
)的描述性统计信息,与上面数值列的描述性统计信息相同。
如果你想要同时获取数值列和对象列的描述性统计信息(尽管对象列的统计信息可能不是很有用),可以这样做:
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
参数指定要包括的数据类型(如 all
、numeric
、object
、categorical
),以及通过 exclude
参数排除某些列。
例如,自定义分位数:
print(df.describe(percentiles=[.1, .9]))
这将生成包含10%和90%分位数的统计信息。
总之,Pandas的 describe()
方法是数据分析中非常有用的工具,可以快速获得数据的概览和统计信息。