【pandas】第一章 预备知识
Datawhale提供的pandas学习的开源地址:Joyful Pandas
https://datawhalechina.github.io/joyful-pandas/build/html/%E7%9B%AE%E5%BD%95/ch1.html


一、Python基础

1. 列表推导式与条件赋值

列表推导式:

 [* for i in *] 。
 其中,第一个 * 为映射函数,其输入为后面 i 指代的内容,第二个 * 表示迭代的对象。

【pandas】第一章 预备知识_Pandas
多层嵌套:第一个 for 为外层循环,第二个为内层循环
【pandas】第一章 预备知识_Python开发_02
另一个实用的语法糖是带有 if 选择的条件赋值,其形式为value = a if condition else b :
【pandas】第一章 预备知识_Python开发_03
例子:截断列表中超过5的元素,即超过5的用5代替,小于5的保留原来的值:
【pandas】第一章 预备知识_Pandas_04

2. 匿名函数与map方法

匿名函数
【pandas】第一章 预备知识_Pandas_05

但上面的用法其实违背了“匿名”的含义,事实上它往往在无需多处调用的场合进行使用,例如上面列表推导式中的例子,用户不关心函数的名字,只关心这种映射的关系:

【pandas】第一章 预备知识_Pandas_06
对于上述的这种列表推导式的匿名函数映射, Python 中提供了 map 函数来完成,它返回的是一个 map 对象,需要通过 list 转为列表:
【pandas】第一章 预备知识_Python开发_07
对于多个输入值的函数映射,可以通过追加迭代对象实现:
【pandas】第一章 预备知识_Pandas_08

3. zip对象与enumerate方法

zip函数能够把多个可迭代对象打包成一个元组构成的可迭代对象,它返回了一个 zip 对象,通过 tuple, list 可以得到相应的打包结果:
【pandas】第一章 预备知识_Python开发_09
循环迭代的时候使用到 zip 函数:
【pandas】第一章 预备知识_Pandas_10
enumerate 是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号:
【pandas】第一章 预备知识_Pandas_11
等价于下述zip方式

for index, value in zip(range(len(L)), L):
    print(index, value)

当需要对两个列表建立字典映射时,可以利用 zip 对象:
【pandas】第一章 预备知识_Python开发_12
解压
【pandas】第一章 预备知识_Python开发_13

二、Numpy基础

1. np数组的构造

迭代构造
【pandas】第一章 预备知识_Python开发_14
特殊矩阵:zeros, eye, full
【pandas】第一章 预备知识_Python开发_15
随机矩阵: np.random

最常用的随机生成函数:rand, randn, randint, choice 分别代表
0-1均匀分布的随机数组、标准正态的随机数组、随机整数组和随机列表抽样:

rand:0-1均匀分布的随机数组
【pandas】第一章 预备知识_Pandas_16
对于服从区间 a 到 b 上的均匀分布可以如下生成:
【pandas】第一章 预备知识_Python开发_17
生成了 N(0,I) 的标准正态分布
【pandas】第一章 预备知识_Pandas_18
对于服从方差为 σ2 均值为 μ 的一元正态分布可以如下生成:
【pandas】第一章 预备知识_Pandas_19
randint 可以指定生成随机整数的最小值最大值(不包含)和维度大小:
【pandas】第一章 预备知识_Python开发_20
choice 可以从给定的列表中,以一定概率和方式抽取结果,当不指定概率时为均匀采样,默认抽取方式为有放回抽样:

无放回抽样:replace=True
有放回抽样:replace=False
【pandas】第一章 预备知识_Pandas_21
当返回的元素个数与原列表相同时,等价于使用 permutation 函数,即打散原列表:
【pandas】第一章 预备知识_Python开发_22
最后,需要提到的是随机种子,它能够固定随机数的输出结果:
【pandas】第一章 预备知识_Pandas_23

2. np数组的变形与合并

【a】转置: T
【pandas】第一章 预备知识_Python开发_24

【b】合并操作: r_, c_:
对于二维数组而言, r_ 和 c_ 分别表示上下合并和左右合并:
【pandas】第一章 预备知识_Python开发_25
【c】维度变换: reshape

注意对order的理解
【pandas】第一章 预备知识_Pandas_26

3. np数组的切片与索引

数组的切片模式支持使用 slice 类型的 start: end:step 切片,还可以直接传入列表指定某个维度的索引进行切片

取出不包括最后一行的,第0列和第2列:
【pandas】第一章 预备知识_Python开发_27
此外,还可以利用 np.ix_ 在对应的维度上使用布尔索引,但此时不能使用 slice 切片:
【pandas】第一章 预备知识_Pandas_28

4. 常用函数

【a】 where
where 是一种条件函数,可以指定满足条件与不满足条件位置对应的填充值:
【pandas】第一章 预备知识_Python开发_29
【b】 nonzero, argmax, argmin
这三个函数返回的都是索引, nonzero 返回非零数的索引, argmax, argmin 分别返回最大和最小数的索引:
【pandas】第一章 预备知识_Python开发_30
【c】 any, all
any 指当序列至少 存在一个 True 或非零元素时返回 True ,否则返回 False
all 指当序列元素 全为 True 或非零元素时返回 True ,否则返回 False
【d】 cumprod, cumsum, diff
cumprod, cumsum 分别表示累乘和累加函数,返回同长度的数组, diff 表示和前一个元素做差,由于第一个元素为缺失值,因此在默认参数情况下,返回长度是原数组减1
【pandas】第一章 预备知识_Pandas_31
【e】 统计函数
常用的统计函数包括 max, min, mean, median, std, var, sum, quantile ,其中分位数计算是全局方法,因此不能通过 array.quantile 的方法调用:

注意:但是对于含有缺失值的数组,它们返回的结果也是缺失值,如果需要略过缺失值,必须使用 nan* 类型的函数,上述的几个统计函数都有对应的 nan* 函数。

【pandas】第一章 预备知识_Python开发_32
对于协方差和相关系数分别可以利用 cov, corrcoef 如下计算:
【pandas】第一章 预备知识_Pandas_33

5. 广播机制

【pandas】第一章 预备知识_Python开发_34

6. 向量与矩阵的计算

【pandas】第一章 预备知识_Pandas_35
【pandas】第一章 预备知识_Python开发_36
【pandas】第一章 预备知识_Pandas_37

三、练习

【pandas】第一章 预备知识_Python开发_38
【pandas】第一章 预备知识_Python开发_39

【pandas】第一章 预备知识_Python开发_40
【pandas】第一章 预备知识_Python开发_41
【pandas】第一章 预备知识_Pandas_42
【pandas】第一章 预备知识_Python开发_43
【pandas】第一章 预备知识_Python开发_44
【pandas】第一章 预备知识_Pandas_45

【pandas】第一章 预备知识_Python开发_46
【pandas】第一章 预备知识_Python开发_47

补漏
  1. reshape中注意对order的理解:
    order=‘C’ 按照行读取和填充
    order=‘F’ 按照列读取和填充
  2. n np.ix_ 在对应的维度上使用布尔索引,但此时不能使用 slice 切片
  3. array. cumprod, cumsum, diff: 累乘、累加、差值
  4. 统计函数都有对应的 nan* 函数
  5. r_ 和 c_ 分别表示上下合并和左右合并
思考

在本篇中,本队思考了这样一个问题,对于axis多维度的理解:
通俗来讲,逐个拿出或统计也就是按照维度下标逐一进行,如从axis=0,…,-1依次取出或计算第0个下标,到第-1个下标

【pandas】第一章 预备知识_Python开发_48
像这个二维的,(2,3)其索引方式可以表示成上图的形式,axis=0就是从第0个下标开始计算或统计,也就是从0到1;axis=1从第1个下标开始算,也就是从0到1到2

因此,在按照axis=0进行求和时我们会得到按列进行求和的结果,00+10,01+11,02+12