Pandas `info`, `describe`, `value_counts`:快速数据概览

好的,各位观众老爷们,技术宅男们,还有屏幕前的小仙女们!欢迎来到今天的“Pandas数据魔法课堂”!🧙‍♂️✨

今天我们要聊的是Pandas这个数据分析界的瑞士军刀里,几个非常实用的小工具——infodescribevalue_counts。这三位小伙伴,就像你的数据侦察兵,能帮你快速了解数据的基本情况,让你在数据分析的道路上少走弯路,不踩坑,不掉头发!(毕竟,头发才是程序员的第一生产力!)

想象一下,你拿到了一份新的数据集,就像拿到了一份藏宝图,满怀期待地想要挖掘里面的宝藏。但是,如果你连藏宝图上的文字都看不懂,地形也不熟悉,那还怎么寻宝呢? 这时候,我们的三位侦察兵就派上用场了!

一、 info():数据的体检报告

info() 函数就像是给你的数据集做一次全面的体检。它会告诉你数据集的“三围”,也就是行数、列数,以及每一列的数据类型,还有内存占用情况。

import pandas as pd

# 假设我们有一个名为 df 的 DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六', '张三'],
        '年龄': [25, 30, 28, 22, 25],
        '性别': ['男', '女', '男', '女', '男'],
        '工资': [8000, 12000, 10000, 6000, None], # 包含缺失值
        '城市': ['北京', '上海', '深圳', '广州', '北京']}
df = pd.DataFrame(data)

df.info()

运行上面的代码,你会看到类似下面的输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   姓名      5 non-null      object
 1   年龄      5 non-null      int64
 2   性别      5 non-null      object
 3   工资      4 non-null      float64
 4   城市      5 non-null      object
dtypes: float64(1), int64(1), object(3)
memory usage: 328.0+ bytes

这段信息包含了什么呢?

  • <class 'pandas.core.frame.DataFrame'>: 告诉我们这是一个 Pandas DataFrame 对象。这就像告诉你,你拿到的是一辆汽车,而不是一辆自行车。
  • RangeIndex: 5 entries, 0 to 4: 说明这个 DataFrame 有 5 行,索引从 0 到 4。 这就像告诉你,这辆汽车有5个座位。
  • Data columns (total 5 columns): 说明这个 DataFrame 有 5 列。这就像告诉你,这辆汽车有5个轮子。(好吧,是5个属性。)
  • Column Non-Null Count Dtype: 这部分是重点!它告诉你每一列的名称 (Column),非空值的数量 (Non-Null Count),以及数据类型 (Dtype)。
    • 姓名: 5 个非空值,数据类型是 object (字符串)。
    • 年龄: 5 个非空值,数据类型是 int64 (整数)。
    • 性别: 5 个非空值,数据类型是 object (字符串)。
    • 工资: 4 个非空值,数据类型是 float64 (浮点数)。注意这里,工资只有 4 个非空值,说明有缺失值! 敲黑板!这是重点!
    • 城市: 5 个非空值,数据类型是 object (字符串)。
  • dtypes: float64(1), int64(1), object(3): 总结了每种数据类型的列数。 这就像告诉你,这辆汽车有 1 个油箱,1 个发动机,和 3 个装饰品。
  • memory usage: 328.0+ bytes: 告诉我们这个 DataFrame 占用了多少内存。 这就像告诉你,这辆汽车有多重。

通过 info(),我们可以快速了解到:

  • 数据集的大小(行数和列数)。
  • 每一列的数据类型,这对于后续的数据处理非常重要。例如,如果你想对某一列进行数值计算,但是它的数据类型是字符串,那就需要先进行类型转换。
  • 是否存在缺失值! 这是最重要的一点!缺失值是数据分析的噩梦,需要我们特别关注。

info() 就像一份体检报告,告诉你数据的基本健康状况,让你心里有数。

二、describe():数据的统计画像

describe() 函数就像是给你的数据集做一个统计画像。它会计算出每一列的各种统计指标,比如均值、标准差、最小值、最大值、分位数等等。

df.describe()

运行上面的代码,你会看到类似下面的输出:

       年龄          工资
count  5.0   4.000000
mean  26.0  9000.000000
std   3.162278  2581.988897
min  22.0  6000.000000
25%  25.0  7500.000000
50%  25.0  9000.000000
75%  28.0  10500.000000
max  30.0  12000.000000

这段信息包含了什么呢?

  • count: 非空值的数量。
  • mean: 均值(平均数)。
  • std: 标准差,衡量数据的离散程度。
  • min: 最小值。
  • 25%: 第一四分位数,也就是 25% 的数据小于这个值。
  • 50%: 第二四分位数,也就是中位数,50% 的数据小于这个值。
  • 75%: 第三四分位数,也就是 75% 的数据小于这个值。
  • max: 最大值。

通过 describe(),我们可以快速了解到:

  • 数据的中心趋势(均值、中位数)。
  • 数据的离散程度(标准差)。
  • 数据的范围(最小值、最大值)。
  • 数据的分布情况(四分位数)。

describe() 就像一张统计画像,让你对数据的整体分布有一个大致的了解,可以帮助你发现异常值或者潜在的问题。

注意: describe() 默认只对数值类型的列进行统计。 如果你想对非数值类型的列进行统计,可以添加 include='all' 参数。

df.describe(include='all')

这样,你就可以看到字符串类型列的统计信息了,比如 count (非空值数量)、unique (唯一值数量)、top (出现频率最高的值)、freq (出现频率最高的值的频率)。

三、value_counts():数据的点名册

value_counts() 函数就像是一个点名册,它可以统计某一列中每个值的出现次数。

df['城市'].value_counts()

运行上面的代码,你会看到类似下面的输出:

北京    2
上海    1
深圳    1
广州    1
Name: 城市, dtype: int64

这段信息告诉我们,城市这一列中,北京出现了 2 次,上海、深圳、广州各出现了 1 次。

通过 value_counts(),我们可以快速了解到:

  • 某一列中每个值的分布情况。
  • 哪些值出现频率最高。
  • 是否存在异常值。

value_counts() 就像一个点名册,让你清楚地知道每一位“同学”的出勤情况,可以帮助你发现数据中的模式和规律。

value_counts() 的一些常用参数:

  • normalize=True: 将结果转换为频率(百分比)。
  • sort=True: 按照频率排序(默认)。
  • ascending=False: 降序排列(默认)。
  • dropna=True: 排除缺失值(默认)。

举个栗子:

df['性别'].value_counts(normalize=True) # 计算性别的比例

输出:

男    0.6
女    0.4
Name: 性别, dtype: float64

结果显示,男性占比 60%,女性占比 40%。

四、综合应用:数据侦察兵的完美配合

现在,让我们把这三位侦察兵组合起来,进行一次全面的数据侦察:

  1. info(): 先用 info() 了解数据集的整体情况,包括行数、列数、数据类型和缺失值情况。
  2. describe(): 然后用 describe() 对数值类型的列进行统计分析,了解数据的中心趋势、离散程度和范围。
  3. value_counts(): 最后用 value_counts() 对非数值类型的列进行统计分析,了解每个值的分布情况。

通过这三步,你就可以对数据集有一个非常清晰的认识,为后续的数据清洗、数据探索和数据建模打下坚实的基础。

五、实战演练:分析一份真实的房价数据

让我们用一份真实的房价数据来演练一下:

# 假设我们有一个名为 house_price.csv 的房价数据文件
df_house = pd.read_csv('house_price.csv')

# 1. 使用 info() 查看数据基本信息
df_house.info()

# 2. 使用 describe() 查看数值类型列的统计信息
df_house.describe()

# 3. 使用 value_counts() 查看房屋类型的分布情况
df_house['房屋类型'].value_counts()

# 4. 使用 value_counts(normalize=True) 查看房屋类型的比例
df_house['房屋类型'].value_counts(normalize=True)

# 5. 结合 info() 和 value_counts() 查看缺失值情况
#   例如,如果某一列的 Non-Null Count 小于总行数,说明存在缺失值
#   然后可以使用 value_counts() 查看缺失值的具体情况
df_house['小区名称'].value_counts(dropna=False) # 显示包含缺失值的统计结果

通过上面的代码,你可以了解到:

  • 房价数据的行数、列数、数据类型。
  • 房价的均值、标准差、最小值、最大值。
  • 各种房屋类型的数量和比例。
  • 是否存在缺失值,以及缺失值的具体情况。

六、总结:数据分析的基石

info()describe()value_counts() 是 Pandas 中非常基础但又非常重要的函数。 它们就像数据分析的基石,能帮你快速了解数据的基本情况,让你在数据分析的道路上事半功倍。

记住,数据分析不是一项神秘的魔法,而是一项需要耐心、细致和不断学习的技能。 掌握这些基本工具,你就可以更好地理解数据,发现数据中的价值,最终成为一名合格的数据分析师!

希望今天的课程对大家有所帮助! 如果你喜欢我的文章,请点赞、评论、转发,你的支持是我最大的动力! 感谢大家的观看,我们下期再见!👋

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注