用 pandas_exercises 把 pandas 练到能上手干活
【免费下载链接】pandas_exercisesPractice your pandas skills!项目地址: https://gitcode.com/gh_mirrors/pa/pandas_exercises
教程看完,一碰几万行的 CSV 就卡壳:列名怎么改、缺失值藏在哪、分组统计怎么落,脑子里没底。pandas_exercises 就是用来补这个洞的——它只给题目、不给现成代码,把取数、筛选、分组、合并、时间序列和绘图拆成一格一格的小题,逼你一行行敲出来。
先拉仓库到本地,依赖一次性装齐就能开跑:
git clone https://gitcode.com/gh_mirrors/pa/pandas_exercises项目的requirements.txt只锁了四个版本:numpy==1.13.1、matplotlib==2.0.2、seaborn==0.8.1、pandas==0.23.4。注意这几位是 2018 年前后的老版本,拿新环境跑老 notebook 偶尔会撞 API 变更。装依赖:
pip install -r requirements.txt每个主题都是三件套:Exercises.ipynb(题目)、Solutions.ipynb(答案不带代码)和一份带代码注释的 Solutions。卡住时先翻不带代码的那份,能自己推出来再去看实现,比直接抄快得多。
先把六个能力维度和对应练习集摆在一起看,心里有张地图:
| 能力维度 | 对应练习集 |
|---|---|
| 取数·建表·筛选排序 | 01 Chipotle / 08 Pokemon / 02 Fictional_Army / 11 Indexing |
| 分组聚合·函数·合并 | 03 Regiment / 06 US_Baby_Names / 04 / 05 Auto_MPG |
| 时间序列·缺失值·统计 | 09 Apple_Stock / 10 Iris / 06 Wind_Stats |
| 数据可视化 | 07 Tips / 07 Titanic_Disaster |
用 pandas 快速摸清原始数据结构(取数与类型转换)
拿到 CSV 第一件事不是分析,而是搞清楚它长什么样:形状、列名、索引、每列类型。Chipotle 让你从网上拉一份外卖订单,一路数到"最常被点的菜、总收入、客单价";Occupation 和 World_Food_Facts 换数据集重复同样动作,Pokemon 则反过来从字典手搓一个 DataFrame、调列顺序、补新列。典型场景:读完文件先head、shape、dtypes,再把带$和千分位逗号的价格列转成 float。这一关最磨的是类型判断——不先replace掉符号直接转类型会报错,价格列其实是字符串。
用布尔索引筛行并排好序(pandas 筛选与排序)
过滤和排序是日常清洗里出现频率最高的两个动作。Fictional_Army 一套题覆盖loc/iloc、按值筛选、按名字取行取列,Euro12 让你给球队按红黄牌排序、筛进球多的队,Chipotle 与 Indexing 再补索引的边角。典型场景:一个表达式筛出"红牌>5 或 黄牌>3"的行,再按黄牌降序排。适合刚学完布尔索引、想练手感的人。易错点:多条件要用&、|且每个条件加括号,写成and/or会抛 truth value 错误。
📊 用 groupby 回答分组统计(pandas 分组聚合与透视)
业务问题九成是"按 X 分一下,看每组的均值、总和、个数"。Regiment 练到按 regiment、company 两级分组求均值、遍历 group;Alcohol_Consumption 和 Occupation 换真实数据做同样的活,US_Baby_Names 再让你按名字 groupby 数出现次数、求中位数和标准差。典型场景:把学生表按 regiment、company 分组求 preTestScore 均值,再展开成普通列。新手常在这里卡住多级 index——它想当普通列用,就得reset_index(),否则列被收进索引里。
⚙️ 用 apply 做转换并拼成宽表(pandas 函数应用与多表合并)
有些转换没有现成函数,得自己写逻辑再广播到每行;还有些任务本来就是两张表拼一起。Students_Alcohol_Consumption 用 lambda 把姓名列首字母大写、再按十年分组;US_Crime_Rates 把 Year 转 datetime 后按十年 sum。合并这边 Auto_MPG 把 cars1、cars2 拼成一张表并补 owners 列,Housing_Market 演示 concat 和 reindex。典型场景:两个 cars 表 merge 成宽表,再随机补一列。易错有两处:merge 后重名列会带_x/_y后缀,apply 返回的是新对象、不会改原表。
📅 把数据摆上时间轴并清干净(pandas 时间序列与缺失值)
带日期的数据要能重采样、取月末、算间隔;脏数据则要先填或删。Apple_Stock 把股价转 DatetimeIndex、取每月最后一个交易日、画 13.5×9 的图;Iris 和 Wine 专门练drop、dropna、按值填充 1.0/100;Wind_Stats 在满是 NaN 的风速数据上做 min/max/mean/std。典型场景:股票数据转 DatetimeIndex、重采样到月末、去掉空行。易错点:年份被读成 2061 要先修数据再设索引,重采样会补出无数据的月、得再 drop 掉。
📈 用图把分析结论讲清楚(pandas 数据可视化)
算出来的数不画出来,别人看不出结论。Tips 基于 seaborn 练直方图、散点、箱线图,还要求把 Dinner/Lunch 并排放两张;Titanic_Disaster 做男女比例饼图、按性别上色的散点和票价直方图;Online_Retail 与 Scores 再补大表和分数的表达。典型场景:把账单金额与 tip 画散点,再按 day 分箱线。这一关最考"把结论选对图",seaborn 版本偏老,画图 API 跟新文档对不上时照 notebook 走即可。
💡 几个省时间的做法与容易踩的坑
- 价格、年份列先
replace掉$、,再astype(float)——to_numeric一碰符号就抛错,别等报错再补。 - 布尔组合写
&、|并给每个条件加括号,而不是and、or——后者对 Series 报 truth value 错误。 apply的结果要df['col'] = ...赋值回去,它返回新对象、原表不动,这是最容易以为"已经改了"的坑。- 多级 groupby 想当普通列用就
reset_index();老版本锁了 pandas 0.23,read_csv、to_datetime的行为跟新版略有出入,照 notebook 来别凭记忆。
刷完这几组,自测一下
- 面对一份陌生 CSV,能否在几秒内说出它的形状、列名和每列类型?
- 能否只用一个布尔表达式筛出"红牌>5 或 黄牌>3"的行并排序?
- 能否用两级 groupby 算出每个 regiment、company 的平均分并展开成普通列?
- 能否用 apply + lambda 完成列内字符串转换,并正确赋值回原 DataFrame?
- 能否把两个 cars 表合并成一张宽表并补齐缺失列?
- 能否把股票数据转成 DatetimeIndex、重采样到月末并清掉 NaN?
题量不重,一个主题一晚上能刷完,配 Solutions 对照改一遍,手感就出来了。
【免费下载链接】pandas_exercisesPractice your pandas skills!项目地址: https://gitcode.com/gh_mirrors/pa/pandas_exercises
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考