【pandas】第一章 預備知識

阿芒Aris發表於2020-12-15

【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 指代的內容,第二個 * 表示迭代的物件。

在這裡插入圖片描述
多層巢狀:第一個 for 為外層迴圈,第二個為內層迴圈
在這裡插入圖片描述
另一個實用的語法糖是帶有 if 選擇的條件賦值,其形式為value = a if condition else b :
在這裡插入圖片描述
例子:截斷列表中超過5的元素,即超過5的用5代替,小於5的保留原來的值:
在這裡插入圖片描述

2. 匿名函式與map方法

匿名函式
在這裡插入圖片描述

但上面的用法其實違背了“匿名”的含義,事實上它往往在無需多處呼叫的場合進行使用,例如上面列表推導式中的例子,使用者不關心函式的名字,只關心這種對映的關係:

在這裡插入圖片描述
對於上述的這種列表推導式的匿名函式對映, Python 中提供了 map 函式來完成,它返回的是一個 map 物件,需要通過 list 轉為列表:
在這裡插入圖片描述
對於多個輸入值的函式對映,可以通過追加迭代物件實現:
在這裡插入圖片描述

3. zip物件與enumerate方法

zip函式能夠把多個可迭代物件打包成一個元組構成的可迭代物件,它返回了一個 zip 物件,通過 tuple, list 可以得到相應的打包結果:
在這裡插入圖片描述
迴圈迭代的時候使用到 zip 函式:
在這裡插入圖片描述
enumerate 是一種特殊的打包,它可以在迭代時繫結迭代元素的遍歷序號:
在這裡插入圖片描述
等價於下述zip方式

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

當需要對兩個列表建立字典對映時,可以利用 zip 物件:
在這裡插入圖片描述
解壓
在這裡插入圖片描述

二、Numpy基礎

1. np陣列的構造

迭代構造
在這裡插入圖片描述
特殊矩陣:zeros, eye, full
在這裡插入圖片描述
隨機矩陣: np.random

最常用的隨機生成函式:rand, randn, randint, choice 分別代表
0-1均勻分佈的隨機陣列、標準正態的隨機陣列、隨機整陣列和隨機列表抽樣:

rand:0-1均勻分佈的隨機陣列
在這裡插入圖片描述
對於服從區間 a 到 b 上的均勻分佈可以如下生成:
在這裡插入圖片描述
生成了 N(0,I) 的標準正態分佈
在這裡插入圖片描述
對於服從方差為 σ2 均值為 μ 的一元正態分佈可以如下生成:
在這裡插入圖片描述
randint 可以指定生成隨機整數的最小值最大值(不包含)和維度大小:
在這裡插入圖片描述
choice 可以從給定的列表中,以一定概率和方式抽取結果,當不指定概率時為均勻取樣,預設抽取方式為有放回抽樣:

無放回抽樣:replace=True
有放回抽樣:replace=False
在這裡插入圖片描述
當返回的元素個數與原列表相同時,等價於使用 permutation 函式,即打散原列表:
在這裡插入圖片描述
最後,需要提到的是隨機種子,它能夠固定隨機數的輸出結果:
在這裡插入圖片描述

2. np陣列的變形與合併

【a】轉置: T
在這裡插入圖片描述

【b】合併操作: r_, c_:
對於二維陣列而言, r_ 和 c_ 分別表示上下合併和左右合併:
在這裡插入圖片描述
【c】維度變換: reshape

注意對order的理解
在這裡插入圖片描述

3. np陣列的切片與索引

陣列的切片模式支援使用 slice 型別的 start: end:step 切片,還可以直接傳入列表指定某個維度的索引進行切片

取出不包括最後一行的,第0列和第2列:
在這裡插入圖片描述
此外,還可以利用 np.ix_ 在對應的維度上使用布林索引,但此時不能使用 slice 切片:
在這裡插入圖片描述

4. 常用函式

【a】 where
where 是一種條件函式,可以指定滿足條件與不滿足條件位置對應的填充值:
在這裡插入圖片描述
【b】 nonzero, argmax, argmin
這三個函式返回的都是索引, nonzero 返回非零數的索引, argmax, argmin 分別返回最大和最小數的索引:
在這裡插入圖片描述
【c】 any, all
any 指當序列至少 存在一個 True 或非零元素時返回 True ,否則返回 False
all 指當序列元素 全為 True 或非零元素時返回 True ,否則返回 False
【d】 cumprod, cumsum, diff
cumprod, cumsum 分別表示累乘和累加函式,返回同長度的陣列, diff 表示和前一個元素做差,由於第一個元素為缺失值,因此在預設引數情況下,返回長度是原陣列減1
在這裡插入圖片描述
【e】 統計函式
常用的統計函式包括 max, min, mean, median, std, var, sum, quantile ,其中分位數計算是全域性方法,因此不能通過 array.quantile 的方法呼叫:

注意:但是對於含有缺失值的陣列,它們返回的結果也是缺失值,如果需要略過缺失值,必須使用 nan* 型別的函式,上述的幾個統計函式都有對應的 nan* 函式。

在這裡插入圖片描述
對於協方差和相關係數分別可以利用 cov, corrcoef 如下計算:
在這裡插入圖片描述

5. 廣播機制

在這裡插入圖片描述

6. 向量與矩陣的計算

【a】向量內積: dot
在這裡插入圖片描述
在這裡插入圖片描述

三、練習

Ex1:利用列表推導式寫矩陣乘法
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

補漏

  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個下標

在這裡插入圖片描述
像這個二維的,(2,3)其索引方式可以表示成上圖的形式,axis=0就是從第0個下標開始計算或統計,也就是從0到1;axis=1從第1個下標開始算,也就是從0到1到2

因此,在按照axis=0進行求和時我們會得到按列進行求和的結果,00+10,01+11,02+12

相關文章