好的,各位观众老爷们,技术宅男们,还有屏幕前的小仙女们!欢迎来到今天的“Pandas数据魔法课堂”!🧙♂️✨
今天我们要聊的是Pandas这个数据分析界的瑞士军刀里,几个非常实用的小工具——info
、describe
和value_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%。
四、综合应用:数据侦察兵的完美配合
现在,让我们把这三位侦察兵组合起来,进行一次全面的数据侦察:
info()
: 先用info()
了解数据集的整体情况,包括行数、列数、数据类型和缺失值情况。describe()
: 然后用describe()
对数值类型的列进行统计分析,了解数据的中心趋势、离散程度和范围。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 中非常基础但又非常重要的函数。 它们就像数据分析的基石,能帮你快速了解数据的基本情况,让你在数据分析的道路上事半功倍。
记住,数据分析不是一项神秘的魔法,而是一项需要耐心、细致和不断学习的技能。 掌握这些基本工具,你就可以更好地理解数据,发现数据中的价值,最终成为一名合格的数据分析师!
希望今天的课程对大家有所帮助! 如果你喜欢我的文章,请点赞、评论、转发,你的支持是我最大的动力! 感谢大家的观看,我们下期再见!👋