# joyful-pandas **Repository Path**: cui_jiang/joyful-pandas ## Basic Information - **Project Name**: joyful-pandas - **Description**: Pandas中文教程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Joyful-Pandas 【本教程与Pandas官方最新发行版本保持同步,当前版本:[v-1.0.3]()】 【注意】使用教程前请务必将Pandas升级到最新版本,否则可能会有代码运行报错 #### 一、写作初衷 在使用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.x升级后具有最大改动的方面。 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、欢迎任何有益的建议或想法,可邮件(1801214626@qq.com)交流! 2、不免有错误,欢迎提Issues! #### 六、参考资料 1、[Python for Data Analysis]() Wes McKinney著 2、[Pandas Cookbook]() Theodore Petrou著 3、[User Guide]() Pandas开发团队编写 #### 七、推广