Skip to content

qwelongh/joyful-pandas

 
 

Repository files navigation

Joyful-Pandas

【本教程与Pandas官方最新发行版本保持同步,当前版本:v-1.0.3

一、写作初衷

在使用Pandas之前,几乎所有的大型表格处理问题都是用xlrd/xlwt和python循环实现,虽然这已经几乎能完成一切的需求,但其缺点也显而易见,其一就是速度问题,其二就是代码的复用性几乎为0。

曾经也尝试过去零星地学Pandas,但不得不说这个包实在太过庞大,每次使用总觉得盲人摸象,每个函数的参数也很多,学习的路线并不是十分平缓。如果你刚刚上手使用Pandas,那么在碎片的学习过程中,报错是常常发生的事,并且很难修(因为不理解内部的操作),即使修好了下次又不会,令人有些沮丧。

2019秋季,我偶然找到了一本完全关于Pandas的书,Theodore Petrou所著的Pandas Cookbook,现在可在网上下到pdf,不过现在还没有中文版。寒假开始后,立即快速地过了一遍,发现之前很多搞不清的概念得到了较好的解答,逐步地再对着User Guide一字一句查看,最后总算是建立了大的一些宏观概念。

最关键的一步,我想是通读了官方User Guide的绝大部分内容,这可能是非常重要的一个台阶,毕竟官方的教程总是会告诉你重点在哪里。因此,经过了一段时间的思考,结合了Wes Mckinney(Pandas之父)的Python for Data Analysis、先前提到的Pandas Cookbook和官方的User Guide,由此想按照自己的思路编一套关于Pandas的教程,完整梳理Pandas的主线内容,杜绝浅尝辄止,保证涉及每个部分的核心概念和函数。最后,希望达到的境界自然是“所写所得即所想”,这大概需要更多的实践,也是努力实现的目标方向。

关于项目的名字,我想原先使用Pandas时非常的痛苦(Painful),那现在是时候转变为“Joyful-Pandas”了!

二、编排思路

本项目共有十章,可以大致分为4个板块:Pandas基础、四类操作、四类数据、例子。

1、拿到数据必然先要读取它,分析完了数据必然是要保存它,读取了数据之后,我们面对了怎样的对象(Series? or Dataframe?)是第一重要的课题,因此了解序列和数据框的常规操作及其组件(component)便是必须涉及的内容。

2、对于一个DataFrame而言,如果一个操作使得它的元素信息减少了,那就对应了索引,即第二章的内容;如果这个操作使得数据的信息被充分地使用,那有两种可能,第一是数据被分组,从组内提取了关键的信息,第二就是数据呈现的结构或形态上的变化,使得我们更容易地能够地进一步处理数据,这两者分别对应了第三章与第四章的内容;最终如果一个操作使得原本不属于这个数据框的信息被加入了进来,那往往是涉及到了合并操作,对应了第五章的内容。从数据信息增减的角度,拆解成了3个板块,4个章节,几乎串联其了官方文档关于数据框操作的全部内容,我想这样的安排是合适的。

3、如果说前面我们关心了序列和数据框这两种容器的结构和操作,那么下面就要关心其中的元素。其中,将涉及四类特殊的数据类型:缺失型数据、文本型数据、分类型数据和时间序列型数据,分别对应了6-9章的内容,并且在缺失型数据和文本型数据中,将详细涉及Pandas1.0版本新的Nullable和string数据类型,这也是从上一个版本0.25.3升级后具有最大改动的方面。

4、正如前面所说,Pandas的学习往往是任务驱动型,一个操作或者某个方法,不去使用自然会很快地忘记(除非你天赋异禀!),因此我前九章都会添加“问题和练习”的部分。其中,问题中出现的往往是对于教程中某个细节的深入与补充,或者是关于这一章函数方法的实践理解,希望你能够查阅相关资料阅读以解决问题;而练习部分包含了两个综合题(两个的不同案例),相当于对前面所学的综合运用,虽不是非常复杂,但是想要全完成,还是需要花一些功夫。最终,在第10章中会添加若干难度不一的综合问题(不定期更新)。

基于完整性,我为所有的练习写了参考答案,当然它不一定是优秀的解析,但是不失为一种提示与策略。

最后,祝你有所收获!

三、内容导航

章节 小节 内容
第1章 Pandas基础 一、文件读取与写入 1. 读取
2. 写入
二、基本数据结构 1. Series
2. DataFrame
三、常用基本函数 1. head和tail
2. unique和nunique
3. count和value_counts
4. describe和info
5. idxmax和nlargest
6. clip和replace
7. apply函数
四、排序 1. 索引排序
2. 值排序
五、问题与练习 1. 问题
2. 练习
第2章 索引 一、单级索引 1. loc方法、iloc方法、[]操作符
2. 布尔索引
3. 快速标量索引
4. 区间索引
二、多级索引 1. 创建多级索引
2. 多层索引切片
3. 多层索引中的slice对象
4. 索引层的交换
三、索引设定 1. index_col参数
2. reindex和reindex_like
3. set_index和reset_index
4. rename_axis和rename
四、常用索引型函数 1. where函数
2. mask函数
3. query函数
五、重复元素处理 1. duplicated方法
2. drop_duplicates方法
六、抽样函数 抽样函数
七、问题与练习 1. 问题
2. 练习
第3章 分组 一、SAC过程 1. 内涵
2. apply过程
二、groupby函数 1. 分组函数的基本内容
2. groupby对象的特点
三、聚合、过滤和变换 1. 聚合(Aggregation)
2. 过滤(Filteration)
3. 变换(Transformation)
四、apply函数 1. apply函数的灵活性
2. 用apply同时统计多个指标
五、问题与练习 1. 问题
2. 练习
第4章 变形 一、透视表 1. pivot
2. pivot_table
3. crosstab(交叉表)
二、其他变形方法 1. melt
2. 压缩与展开
三、哑变量与因子化 1. Dummy Variable(哑变量)
2. factorize方法
四、问题与练习 1. 问题
2. 练习
第5章 合并 一、append与assign 1. append方法
2. assign方法
二、combine与update 1. comine方法
2. update方法
三、concat方法 concat方法
四、merge与join 1. merge函数
2. join函数
五、问题与练习 1. 问题
2. 练习
第6章 缺失数据 一、缺失观测及其类型 1. 了解缺失信息
2. 三种缺失符号
3. Nullable类型与NA符号
4. NA的特性
5. convert_dtypes方法
二、缺失数据的运算与分组 1. 加号与乘号规则
2. groupby方法中的缺失值
三、填充与剔除 1. fillna方法
2. dropna方法
四、插值(interpolation) 1. 线性插值
2. 高级插值方法
3. interpolate中的限制参数
五、问题与练习 1. 问题
2. 练习
第7章 文本数据 一、string类型的性质 1. string与object的区别
2. string类型的转换
二、拆分与拼接 1. str.split方法
2. str.cat方法
三、替换 1. str.replace的常见用法
2. 子组与函数替换
3. 关于str.replace的注意事项
四、子串匹配与提取 1. str.extract方法
2. str.extractall方法
3. str.contains和str.match
五、常用字符串方法 1. 过滤型方法
2. isnumeric方法
六、问题与练习 1. 问题
2. 练习
第8章 分类数据 一、category的创建及其性质 1. 分类变量的创建
2. 分类变量的结构
3. 类别的修改
二、分类变量的排序 1. 序的建立
2. 排序
三、分类变量的比较操作 1. 与标量或等长序列的比较
2. 与另一分类变量的比较
四、问题与练习 1. 问题
2. 练习
第9章 时序数据 一、时序的创建 1. 四类时间变量
2. 时间点的创建
3. DateOffset对象
二、时序的索引及属性 1. 索引切片
2. 子集索引
3. 时间点的属性
三、重采样 1. resample对象的基本操作
2. 采样聚合
3. 采样组的迭代
四、窗口函数 1. Rolling
2. Expanding
五、问题与练习 1. 问题
2. 练习
第10章 不定期更新的例子 一、评委打分 方法一
方法二
方法三
二、企业收入熵指数 参考答案
... ...
参考答案 第1章 练习一
练习二
第2章 练习一
练习二
第3章 练习一
练习二
第4章 练习一
练习二
第5章 练习一
练习二
第6章 练习一
练习二
第7章 练习一
练习二
第8章 练习一
练习二
第9章 练习一
练习二

四、使用的版本

python: 3.7
numpy: 1.18.1
pandas: 1.0.3
matplotlib: 3.1.3
scipy:1.4.1
xlrd:1.2.0
openpyxl:3.0.3

五、反馈

1、欢迎任何有益的建议或想法,可邮件([email protected])交流!

2、不免有错误,欢迎提Issues!

六、参考资料

1、Python for Data Analysis Wes McKinney著

2、Pandas Cookbook Theodore Petrou著

3、User Guide Pandas开发团队编写

七、推广

About

Pandas中文教程

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 100.0%