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 的两大核心数据结构是 SeriesDataFrame。可以将它们想象为数据的“存储容器”,其中:

  • 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 的 mergeconcat 函数支持多种合并方式:

  • merge:基于列进行类似 SQL 的连接操作(如 innerleftright)。
  • 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 |

请完成以下操作:

  1. 创建一个新列 Grade,将分数 ≥ 90 的标记为 "A",其他为 "B"。
  2. 删除 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 包含 IDCategorydf2 包含 IDValue
要求:

  • 将两个表按 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 正是构建数据科学能力的重要基石。

最新发布