pandas預備知識
阿新 • • 發佈:2020-12-17
一.Python基礎
1. 列表推導式與條件賦值
def my_func(x):
return 2*x
[my_func(i) for i in range(5)]
列表表示式還支援多層巢狀,如下面的例子中第一個for為外層迴圈,第二個為內層迴圈:
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
除了列表推導式,另一個實用的語法糖是帶有if選擇的條件賦值,其形式為value = a if condition else b:
L = [1, 2, 3, 4, 5, 6, 7]
[i if i <= 5 else 5 for i in L]
2. 匿名函式與map方法
列表推導式的匿名函式對映,Python中提供了map函式來完成,它返回的是一個map物件,需要通過list轉為列表:
list(map(lambda x: 2*x, range(5)))
對於多個輸入值的函式對映,可以通過追加迭代物件實現:
list(map(lambda x, y: str(x)+'_'+y, range(5), list('abcde')))
3. zip物件與enumerate方法
zip函式能夠把多個可迭代物件打包成一個元組構成的可迭代物件,它返回了一個zip物件,通過tuple, list可以得到相應的打包結果:
L1, L2, L3 = list('abc'), list('def'), list('hij')
list(zip(L1, L2, L3))
for i, j, k in zip(L1, L2, L3):
print(i, j, k)
enumerate是一種特殊的打包,它可以在迭代時繫結迭代元素的遍歷序號:
L = list('abcd')
for index, value in enumerate(L):
print(index, value)
二、Numpy基礎
1. np陣列的構造¶
最一般的方法是通過array來構造:
import numpy as np
np.array([1,2,3])
【a】等差序列:np.linspace, np.arange
np.linspace(1,5,11) # 起始、終止(包含)、樣本個數
np.arange(1,5,2) # 起始、終止(不包含)、步長
【b】特殊矩陣:zeros, eye, full
np.zeros((2,3)) # 傳入元組表示各維度大小
np.eye(3) # 3*3的單位矩陣
np.full((2,3), 10) # 元組傳入大小,10表示填充數值
【c】隨機矩陣:np.random
最常用的隨機生成函式為rand, randn, randint, choice,它們分別表示0-1均勻分佈的隨機陣列、標準正態的隨機陣列、隨機整陣列和隨機列表抽樣:
np.random.rand(3, 3) # 注意這裡傳入的不是元組,每個維度大小分開輸入
randint可以指定生成隨機整數的最小值最大值(不包含)和維度大小:
low, high, size = 5, 15, (2,2) # 生成5到14的隨機整數
np.random.randint(low, high, size)
choice可以從給定的列表中,以一定概率和方式抽取結果,當不指定概率時為均勻取樣,預設抽取方式為有放回抽樣:
my_list = ['a', 'b', 'c', 'd']
np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
最後,需要提到的是隨機種子,它能夠固定隨機數的輸出結果:
2. np陣列的變形與合併
【a】轉置:T
np.zeros((2,3)).T
【b】合併操作:r_, c_
對於二維陣列而言,r_和c_分別表示上下合併和左右合併:
np.r_[np.zeros((2,3)),np.zeros((2,3))]
np.c_[np.zeros((2,3)),np.zeros((2,3))]
【c】維度變換:reshape
target = np.arange(8).reshape(2,4)
target
3. np陣列的切片與索引
陣列的切片模式支援使用slice型別的start