Pandas期末备考:常见问题解析

Pandas 期末考试备考指南

准备 Python Pandas 期末考试可能会让人感到压力山大,尤其是当你不确定老师会考查哪些冷门知识点,还是专注于常见内容时。这篇指南将为你提供核心概念代码示例 以及边角知识点,帮助你全面备考,轻松应对考试。让我们开始吧!


1. Pandas 基础:Series 和 DataFrame

Pandas 的核心是 Series (一维)和 DataFrame(二维)。你必须熟练掌握它们的创建和操作。

示例:创建 Series 和 DataFrame

python 复制代码
import pandas as pd
import numpy as np

# 从列表创建 Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

# 从字典创建 DataFrame
data = {'姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 35], '分数': [85.5, 90.0, 88.5]}
df = pd.DataFrame(data)
print(df)

关键细节

  • np.nan 表示缺失值,而不是 None(不过 Pandas 会自动将 None 转换为 NaN)。
  • Series 的索引是不可变的,但值是可变的。

2. 索引和切片

切片是 Pandas 中非常重要的操作,考试中可能会考查切片区间的细节,比如它是闭区间 还是开区间

示例:切片操作

python 复制代码
# Series 切片
s = pd.Series([10, 20, 30, 40, 50], index=['a', 'b', 'c', 'd', 'e'])
print(s['b':'d'])  # 输出 20, 30, 40

# DataFrame 切片
print(df[1:3])  # 行切片,输出第 1 和第 2 行

关键细节

  • Series 标签切片 (如 s['b':'d'])是闭区间,包含起点和终点。
  • DataFrame 整数切片 (如 df[1:3])是半开区间,包含起点但不包含终点。
  • 使用 .loc(标签索引)和 .iloc(位置索引)时,.loc 是闭区间,.iloc 是半开区间。

3. 数据清洗

数据清洗是 Pandas 的核心功能,常考点包括处理缺失值和重复值。

示例:处理缺失值

python 复制代码
df_with_nan = pd.DataFrame({'A': [1, np.nan, 3], 'B': [4, 5, np.nan]})
print(df_with_nan)

# 填充缺失值
df_filled = df_with_nan.fillna(0)
print(df_filled)

# 删除含缺失值的行
df_dropped = df_with_nan.dropna()
print(df_dropped)

冷门知识点

  • fillna(method='ffill') 会用前一个值填充,method='bfill' 用后一个值填充。
  • dropna(how='all') 只删除全为 NaN 的行,而 how='any' 删除任意含 NaN 的行。

4. 数据合并与连接

合并操作(如 mergeconcat)是考试中的重头戏。

示例:合并 DataFrame

python 复制代码
df1 = pd.DataFrame({'ID': [1, 2, 3], '姓名': ['张三', '李四', '王五']})
df2 = pd.DataFrame({'ID': [2, 3, 4], '分数': [90, 85, 88]})

# 内连接
merged = pd.merge(df1, df2, on='ID', how='inner')
print(merged)

# 纵向拼接
concatenated = pd.concat([df1, df2], axis=0, ignore_index=True)
print(concatenated)

关键细节

  • mergehow 参数有 innerouterleftright 四种类型。
  • concataxis=0 是纵向拼接,axis=1 是横向拼接。

5. 分组与聚合

分组操作(groupby)和聚合函数是数据分析的核心。

示例:分组计算

python 复制代码
df = pd.DataFrame({'班级': ['A', 'A', 'B', 'B'], '分数': [85, 90, 88, 92]})
grouped = df.groupby('班级').agg({'分数': ['mean', 'max']})
print(grouped)

冷门知识点

  • agg 可以接受多个函数,如 ['mean', 'sum', 'count']
  • groupby 后可以用 .apply() 自定义函数,但返回值必须与分组结构兼容。

6. 数据透视表

数据透视表(pivot_table)是考试中可能出现的复杂操作。

示例:创建数据透视表

python 复制代码
df = pd.DataFrame({'班级': ['A', 'A', 'B', 'B'], '性别': ['男', '女', '男', '女'], '分数': [85, 90, 88, 92]})
pivot = pd.pivot_table(df, values='分数', index='班级', columns='性别', aggfunc='mean')
print(pivot)

关键细节

  • pivot_table 默认使用 mean 作为聚合函数,可通过 aggfunc 修改。
  • 如果数据有重复项,pivot 会报错,而 pivot_table 会自动聚合。

7. 时间序列

时间序列可能是冷门考点,但非常实用。

示例:处理时间数据

python 复制代码
dates = pd.date_range('2025-01-01', periods=5, freq='D')
df = pd.DataFrame({'值': [10, 20, 30, 40, 50]}, index=dates)
print(df)

# 按月重采样
monthly = df.resample('M').mean()
print(monthly)

冷门知识点

  • freq='D' 表示按天,M 表示按月,W 表示按周。
  • asfreq()resample() 的区别:前者只取样,后者可以聚合。

8. 性能优化

老师可能会问如何处理大数据集。

示例:优化操作

python 复制代码
# 避免循环,使用向量化操作
df['分数加倍'] = df['分数'] * 2

# 使用 category 类型减少内存
df['班级'] = df['班级'].astype('category')

关键细节

  • apply() 比循环快,但仍不如向量化操作。
  • category 类型适合低基数(重复值多)的列。

9. 常见问题与调试

考试可能涉及代码调试或解释输出。

示例:常见错误

python 复制代码
# KeyError
# print(df['不存在的列'])  # 报错

# 修复:检查列名
print(df.columns)

冷门知识点

  • df.loc[] 如果标签不存在会报错,而 df.get() 返回 None。
  • SettingWithCopyWarning:使用 .loc 赋值避免警告。

10. 总结

  • 常考点:切片、合并、分组、缺失值处理。
  • 冷门点:时间序列、性能优化、数据透视表的细节。
  • 建议:多写代码,熟悉输出结果,尤其是边界情况。

祝你考试顺利!如果有更多问题,随时复习这些示例代码。

相关推荐
weixin_438335404 分钟前
Spring Boot实现接口时间戳鉴权
java·spring boot·后端
寻月隐君8 分钟前
探索Web3新速度:Sonic高性能Layer-1上的BlindAuction智能合约实践
后端·web3·github
天天摸鱼的java工程师1 小时前
Redis 集群缓存不一致?这篇把坑给你挖明白了
后端
天天摸鱼的java工程师1 小时前
Redis 除了做缓存还能干什么?
后端
AntBlack1 小时前
Trae Agent :能提高开发效率的功能都值亲自体验一下
后端·ai编程·trae
江梦寻2 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式
风象南2 小时前
SpringBoot的4种死信队列处理方式
java·spring boot·后端
互联网全栈架构3 小时前
遨游Spring AI:第一盘菜Hello World
java·人工智能·后端·spring
coderSong25689 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy10 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端