Pandas 测验(一文讲透)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在数据科学与编程领域,Pandas 是一个不可或缺的工具库,它以高效的数据操作和简洁的语法著称。无论是处理表格数据、清洗数据,还是进行初步的分析,Pandas 都能提供强大的支持。然而,对于编程初学者和中级开发者来说,如何系统性地掌握 Pandas 的核心功能,并通过实践巩固知识,是提升数据处理能力的关键。本文将以 “Pandas 测验” 为主题,通过知识点解析、案例演示和实战题目,帮助读者逐步构建对 Pandas 的全面理解,并为后续的进阶学习打下坚实基础。
一、Pandas 的核心概念与基础操作
1.1 Series 和 DataFrame:数据结构的基石
Pandas 的两大核心数据结构是 Series 和 DataFrame。可以将它们想象为数据的“存储容器”,其中:
- Series 是一维标记数组,类似于 Excel 的单列数据,支持多种数据类型。
- DataFrame 是二维表格结构,由多列 Series 组合而成,类似于 Excel 的工作表。
代码示例:
import pandas as pd
s = pd.Series([10, 20, 30], index=['A', 'B', 'C'])
print(s) # 输出:A 10, B 20, C 30
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)
1.2 数据选择与索引:精准定位数据
Pandas 提供了灵活的索引方式,常见的包括:
- 标签索引(Label-based):通过列名或自定义索引访问数据。
- 位置索引(Position-based):通过行号或列号访问数据。
代码示例:
selected_column = df['Age']
value = df.loc['Bob', 'Age'] # 输出:30
row = df.iloc[1] # 获取第二行数据
1.3 数据过滤:筛选符合条件的行
使用布尔索引可以快速筛选数据。例如,筛选年龄大于 25 岁的记录:
filtered_df = df[df['Age'] > 25]
print(filtered_df) # 输出 Bob 和 Charlie 的数据
二、进阶操作:数据清洗与转换
2.1 处理缺失值:数据质量的“清道夫”
现实数据中常存在缺失值(NaN),Pandas 提供了多种方法进行处理:
- 检测缺失值:
isnull()
或notnull()
- 删除缺失值:
dropna()
- 填充缺失值:
fillna()
案例:
假设有一个包含缺失值的 DataFrame:
df_with_na = pd.DataFrame({'Score': [85, np.nan, 90],
'Grade': ['A', 'B', np.nan]})
cleaned_df = df_with_na.fillna({'Score': 0, 'Grade': 'Unknown'})
2.2 数据合并:像拼图一样组合数据
Pandas 的 merge
和 concat
函数支持多种合并方式:
merge
:基于列进行类似 SQL 的连接操作(如inner
、left
、right
)。concat
:按行或列方向拼接 DataFrame。
代码示例:
df1 = pd.DataFrame({'Key': ['K0', 'K1'], 'Value': [10, 20]})
df2 = pd.DataFrame({'Key': ['K1', 'K2'], 'Value': [30, 40]})
merged_df = pd.merge(df1, df2, on='Key', how='inner')
2.3 数据分组与聚合:从细节到整体的视角转换
groupby
是 Pandas 中极为强大的功能,它允许按某一列或条件对数据分组,再进行聚合计算(如求和、平均值等)。
比喻:可以将 groupby
想象为“快递分拣中心”,根据包裹的地址标签将数据分组,再统计每组的总件数或平均重量。
代码示例:
sales_data = pd.DataFrame({'Region': ['East', 'East', 'West', 'West'],
'Sales': [150, 200, 100, 250]})
grouped = sales_data.groupby('Region').sum()
三、高级技巧与常见问题
3.1 时间序列操作:让时间数据“活起来”
Pandas 对时间数据的支持非常友好,通过 pd.to_datetime
可以将字符串转换为时间序列对象,并利用 resample
进行按时间段的聚合。
案例:
dates = pd.date_range(start='2023-01-01', periods=5, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30, 40, 50]})
weekly_avg = df.resample('W', on='Date').mean()
3.2 处理重复数据:避免“数据污染”
使用 duplicated()
检测重复行,drop_duplicates()
删除重复项。
技巧:
unique_df = df.drop_duplicates(keep='last')
3.3 性能优化:让代码跑得更快
对于大数据集,可尝试以下方法:
- 使用
apply
替换循环(但需注意其效率限制)。 - 利用
dtypes
调整数据类型,减少内存占用。
示例:
df['Age'] = df['Age'].astype('int16')
四、实战测验:检验你的 Pandas 技能
以下题目涵盖本文讲解的核心知识点,读者可自行尝试解答:
题目 1:基础操作
假设有一个 DataFrame df
,包含以下数据:
| Name | Score |
|--------|-------|
| Alice | 85 |
| Bob | 75 |
| Charlie| 90 |
请完成以下操作:
- 创建一个新列
Grade
,将分数 ≥ 90 的标记为 "A",其他为 "B"。 - 删除
Score
列,并重置索引。
参考答案:
df['Grade'] = ['A' if s >= 90 else 'B' for s in df['Score']]
df = df.drop(columns=['Score']).reset_index(drop=True)
题目 2:数据合并与聚合
有两个 DataFrame:
df1
包含 ID
和 Category
,df2
包含 ID
和 Value
。
要求:
- 将两个表按
ID
进行左连接。 - 按
Category
分组,计算Value
的总和。
参考答案:
merged = pd.merge(df1, df2, on='ID', how='left')
grouped_sum = merged.groupby('Category')['Value'].sum()
五、结论
通过本文的讲解与案例,读者应已掌握 Pandas 的核心功能、常见操作及高级技巧。Pandas 测验不仅是对知识的检验,更是巩固技能的契机。建议读者通过实际项目或模拟数据集反复练习,逐步提升数据处理的效率与准确性。未来,随着对 Pandas 的深入探索,结合可视化工具(如 Matplotlib 或 Seaborn),你将能够更全面地驾驭数据科学的全流程。
记住:编程的学习如同搭建积木,每个知识点都是关键的一块,而 Pandas 正是构建数据科学能力的重要基石。