您的位置:

pandas describe详解——数据统计分析利器

一、基础概念

pandas是python中一个数据处理库。它是基于Numpy的库,拥有比较方便的数据处理和分析能力。其中pandas describe方法是pandas库中一个比较常用的统计分析方法,它能够统计数据的基本情况,例如数量、均值、标准差、最小值、最大值等

describe()的默认设置返回统计量:如最大值、最小值、均值、方差等。返回结果的行标签是统计量,列标记是Series/Dataframe中的列


import pandas as pd

data = {'姓名': ['小明', '小红', '小张', '小李'],
        '性别': ['男', '女', '男', '女'],
        '年龄': [18, 20, 22, 25],
        '身高': [170.0, 173.5, 180.0, 165.5],
        '体重': [60, 65, 70, 55]}

df = pd.DataFrame(data)     #生成DataFrame

#使用pandas的describe函数输出数据的基本情况
print(df.describe())

二、常用参数

除了默认参数外,describe()还有许多可选参数,以适应多种情况下的统计和计算。下面是几个常用的参数:

1、percentiles

使用percentiles参数可以控制得到输出结果中附带的分位数,以浮点数数组的形式指定,需要给出分位数的值。默认是[.25,.50,.75],表示输出25%,50%和75%的分位数。


import pandas as pd

data = {'姓名': ['小明', '小红', '小张', '小李'],
        '性别': ['男', '女', '男', '女'],
        '年龄': [18, 20, 22, 25],
        '身高': [170.0, 173.5, 180.0, 165.5],
        '体重': [60, 65, 70, 55]}

df = pd.DataFrame(data)     #生成DataFrame

#使用pandas的describe函数输出数据的基本情况(包含0.1,0.5,0.9的列表)
print(df.describe(percentiles=[.1, .5, .9]))

2、include/exclude

使用include、exclude参数可以筛选出需要或不需要出现在结果中的列数据


import pandas as pd

data = {'姓名': ['小明', '小红', '小张', '小李'],
        '性别': ['男', '女', '男', '女'],
        '年龄': [18, 20, 22, 25],
        '身高': [170.0, 173.5, 180.0, 165.5],
        '体重': [60, 65, 70, 55]}

df = pd.DataFrame(data)     #生成DataFrame

#使用pandas的describe函数输出“姓名”列和“年龄”列的基本情况
print(df.describe(include=['object', 'int'],
                  exclude=[np.number]))

3、datetime_is_numeric

使用datetime_is_numeric参数可以判断是否将datetime类型的数据统计为数值类型数据。如果该参数值为True,则datetime类型会被当作数值型数据进行统计,如果该值为False,则datetime类型不会被当作数值型数据进行统计


import pandas as pd

data = {'时间': ['2022-01-01 10:08:00',
                '2022-01-01 11:00:10',
                '2022-01-01 15:25:08',
                '2022-01-01 18:33:20'],
        '数值': [30.21,54.65,22.53,45.32]}

df = pd.DataFrame(data)     #生成DataFrame
df['时间'] = pd.to_datetime(df['时间'])

#使用pandas的describe函数, 将时间项数据视为非数值型
print(df.describe(datetime_is_numeric=False))

4、include_all

使用include_all参数可以显示所有的唯一值信息(include参数设置为all的信息),以字典的形式返回所有列的唯一值 unique、唯一值的数量,每个唯一值的数量分别占总数据样本的多少


import pandas as pd

data = {'姓名': ['小明', '小红', '小张', '小李'],
        '性别': ['男', '女', '男', '女'],
        '年龄': [18, 20, 22, 25],
        '身高': [170.0, 173.5, 180.0, 165.5],
        '体重': [60, 65, 70, 55]}

df = pd.DataFrame(data)     #生成DataFrame

#使用pandas的describe函数,输出唯一值信息
print(df.describe(include='all'))

三、应用场景

1、数据探索性分析

在数据探索性分析中,describe()主要被用于对数据进行初步的分析。例如,我们将可以使用describe()函数获取一个最初的数据摘要,以便更好地理解数据的基本情况


import pandas as pd

#导入数据集
df = pd.read_csv('data.csv', encoding='utf-8')

#使用pandas的describe函数,查看数据的基本情况
print(df.describe())

2、数据预处理

describe()函数在数据预处理中也是一个很有用的工具,它经常被用来了解数据分布、空值等情况。例如,我们可以使用describe()函数来判断数据中有无缺失值,以及如何进行处理。


import pandas as pd

#导入数据集
df = pd.read_csv('data.csv', encoding='utf-8')

#判断数据集中是否有空值
print(df.describe().isnull().any().any())

3、特征工程

特征工程是建立机器学习模型的重要步骤。在特征工程中,describe()函数经常被用来对数据分布、极值等进行分析。


import pandas as pd

#导入数据集
df = pd.read_csv('data.csv', encoding='utf-8')

#使用describe函数,获取数据的基本情况
df_describe = df.describe()

#获取每个特征中极值的差距,并存入新的一列中
df_describe['range'] = df_describe.loc['max'] - df_describe.loc['min']
print(df_describe)

4、数据可视化

描述统计量可以帮助我们快速了解数据的分布情况,通过可视化将统计量呈现出来可以更加直观。例如,对于离散型数据,我们可以绘制柱状图呈现出每个类别的数量;对于数值型数据,我们可以绘制箱线图来呈现数据的分布情况。


import pandas as pd
import matplotlib.pyplot as plt

#导入数据集
df = pd.read_csv('data.csv', encoding='utf-8')

#使用describe函数,获取数据的基本情况
df_describe = df.describe()

#对年龄进行数据可视化
df['年龄'].plot(kind='box')
plt.show()

#绘制身高的柱状图
df['身高'].value_counts().plot(kind='bar')
plt.show()

四、总结

pandas describe()函数是数据科学家通常用来了解数据集基本情况的函数。它提供了一些标准统计值,如最小值、最大值、方差、中位数、四分位数等,对于探索性数据分析、数据预处理、特征工程、数据可视化等环节非常有用。