Skip to content

Commit 29ff723

Browse files
committed
update
1 parent 217e3e5 commit 29ff723

File tree

4 files changed

+1085
-826
lines changed

4 files changed

+1085
-826
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

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

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

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

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

@@ -22,7 +22,7 @@
2222

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

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

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

data/new_table2.xlsx

0 Bytes
Binary file not shown.

第1章 Pandas基础.ipynb

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -458,11 +458,11 @@
458458
{
459459
"data": {
460460
"text/plain": [
461-
"a 0.302995\n",
462-
"b 0.573438\n",
463-
"c 0.536086\n",
464-
"d 0.513209\n",
465-
"e -1.263579\n",
461+
"a -0.152799\n",
462+
"b -1.208334\n",
463+
"c 0.668842\n",
464+
"d 1.547519\n",
465+
"e 0.309276\n",
466466
"Name: 这是一个Series, dtype: float64"
467467
]
468468
},
@@ -491,7 +491,7 @@
491491
{
492492
"data": {
493493
"text/plain": [
494-
"array([ 0.30299458, 0.57343774, 0.53608608, 0.5132085 , -1.26357851])"
494+
"array([-0.15279875, -1.20833379, 0.6688421 , 1.54751933, 0.30927643])"
495495
]
496496
},
497497
"execution_count": 9,
@@ -579,7 +579,7 @@
579579
{
580580
"data": {
581581
"text/plain": [
582-
"0.30299457920628364"
582+
"-0.15279874545981778"
583583
]
584584
},
585585
"execution_count": 13,
@@ -606,7 +606,7 @@
606606
{
607607
"data": {
608608
"text/plain": [
609-
"0.1324296778903958"
609+
"0.23290106551625706"
610610
]
611611
},
612612
"execution_count": 14,
@@ -1496,7 +1496,8 @@
14961496
}
14971497
],
14981498
"source": [
1499-
"df1.assign(C=pd.Series(list('def')))"
1499+
"df1.assign(C=pd.Series(list('def')))\n",
1500+
"#思考:为什么会出现NaN?(提示:索引对齐)assign左右两边的索引不一样,请问结果的索引谁说了算?"
15001501
]
15011502
},
15021503
{
@@ -3072,7 +3073,7 @@
30723073
"cell_type": "markdown",
30733074
"metadata": {},
30743075
"source": [
3075-
"#### 对于DataFrame,它可以迭代每一个列操作"
3076+
"#### 对于DataFrame,它在默认axis=0下可以迭代每一个列操作"
30763077
]
30773078
},
30783079
{
@@ -3195,6 +3196,13 @@
31953196
"df.apply(lambda x:x.apply(lambda x:str(x)+'!')).head() #这是一个稍显复杂的例子,有利于理解apply的功能"
31963197
]
31973198
},
3199+
{
3200+
"cell_type": "markdown",
3201+
"metadata": {},
3202+
"source": [
3203+
"#### Pandas中的axis参数=0时,永远表示的是处理方向而不是聚合方向,当axis='index'或=0时,对列迭代对行聚合,行即为跨列,axis=1同理"
3204+
]
3205+
},
31983206
{
31993207
"cell_type": "markdown",
32003208
"metadata": {},
@@ -3726,7 +3734,9 @@
37263734
"#### 【问题三】 如果有多个索引同时取到最大值,idxmax会返回所有这些索引吗?如果不会,那么怎么返回这些索引?\n",
37273735
"#### 【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。\n",
37283736
"#### sum/mean/median/mad/min/max/abs/std/var/quantile/cummax/cumsum/cumprod\n",
3729-
"#### 【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?问题四提到的函数也有axis参数吗?怎么使用?"
3737+
"#### 【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?问题四提到的函数也有axis参数吗?怎么使用?\n",
3738+
"#### 【问题六】 对值进行排序后,相同的值次序由什么决定?\n",
3739+
"#### 【问题七】 Pandas中为各类基础运算也定义了函数,比如s1.add(s2)表示两个Series相加,但既然已经有了'+',是不是多此一举?"
37303740
]
37313741
},
37323742
{

0 commit comments

Comments
 (0)