numpy 若干行和列_Numpy的轴,pandas的行和列
使用幕布做了一系列詳細(xì)筆記請點擊:
高維ndarray的軸軸編號和索引傻傻分不清楚
很多函數(shù)需要傳入軸編號,非常容易和索引弄混,以3維數(shù)組為例,軸有3條,編號分別為 0,1,2
我們制造一個3×3×3的3維數(shù)組:
arr3d=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[10,11,12],[13,14,15],[16,17,18]],[[19,20,21],[22,23,24],[25,26,27]]])
arr3d.shape
輸出
(3, 3, 3)
arr3d數(shù)組的shape元組為(3,3,3),元組的索引為 [ 0,1,2 ]
可以看到軸編號和shape元組的索引是對等的,所以這個編號可以理解為高維ndarray.shape產(chǎn)生的元組的索引軸是什么鬼
數(shù)組就是按照下面的順序儲存的:
[ [[1,2,3] , [4,5,6] , [7,8,9] ], [[10,11,12] , [13,14,15] , [16,17,18] ] , [[19,20,21] , [22,23,24] , [25,26,27] ] ]
最內(nèi)層一對 [ ] 可以代表一個1維數(shù)組,加粗的一對 [ ]里面有3個一維數(shù)組,也就是2維數(shù)組,最外層的一對 [ ] 里面有3個2維數(shù)組也就是3維數(shù)組
我們知道shape(3,3,3)表示數(shù)組的維度,既然shape的索引可以看做軸編號,那么一條軸其實就是一個維度,0軸對應(yīng)的是最高維度3維,1軸對應(yīng)2維,2軸對應(yīng)的就是最低維度的1維。
數(shù)組中其實不存在行和列的概念,為了便于理解,我們畫一個具有行和列的九宮格把3維數(shù)組裝進(jìn)去
每個方塊代表一個1維數(shù)組,最低維的軸編號2,
1行3個1維數(shù)組組成了1個3×3的2維數(shù)組,所以行代表2維數(shù)組,2維的軸編號1
3行2維數(shù)組組成了3×3×3的3維數(shù)組,所以列代表3維數(shù)組,3維的軸編號0由3個2維數(shù)組組成的3維數(shù)組,每個2維數(shù)組中包含3個1維數(shù)組
什么叫沿軸切片
創(chuàng)建1個3×3的2維數(shù)組arr2d(例子來自《利用Python進(jìn)行數(shù)據(jù)分析》第四章)
arr2d=np.array([ [1,2,3] , [4,5,6] , [7,8,9] ])
arr2d
輸出
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2d的shape元組為 ( 3,3 ) ,這個元組的的索引為 [ 0,1 ] ,表示arr2d這個2維數(shù)組有兩條軸0軸和1軸
首先看1個參數(shù)的切片操作:
arr2d[:2]
這里有個很重要的概念, :2 是切片的第一個參數(shù),約定俗成第一個參數(shù)就代表0軸,0軸表示2維,所以這個切片是在2維這個維度上切的,(書中原文“沿0軸切”)
arr2d的2維上是3個1維數(shù)組,這3個1維數(shù)組當(dāng)然也有索引號也是[0,1,2],[ :2 ] 就表示它要切取2維(0軸)上3個1維數(shù)組中的索引 [ 0 ] 和索引 [ 1 ] ,于是得到 ([ 1, 2, 3 ]) 和 ([ 4, 5, 6 ]) 這兩個1維數(shù)組,我們看下輸出
輸出
array([[1, 2, 3],
[4, 5, 6]])
兩個參數(shù)的切片:
arr2d[:2,1:]
就是在兩個維度(軸)上各切一刀,第1個參數(shù)就是2維(0軸), :2 表示切取2維(0軸)上的索引 [ 0 ] 和索引 [ 1 ] ,即 ([ 1, 2, 3 ]) 和 ([ 4, 5, 6 ]) 這兩個1維數(shù)組
第2個參數(shù)就是1維(1軸),1: 表示切取1維(1軸)上的索引 [ 1 ] 和索引 [ 2 ] ,即對數(shù)組 ([ 1, 2, 3 ]) 取 ([ 2,3 ]) ,對數(shù)組 ([ 4, 5, 6 ]) 取 ([ 5,6 ])
我們看下輸出
輸出
array([[2, 3],
[5, 6]])
傳入軸編號怎么理解
《利用Python進(jìn)行數(shù)據(jù)分析》書中的高維數(shù)組transpose方法,書中原話是比較費腦子,它是醬嬸的:
arr = np.arange(16).reshape((2, 2, 4))
arr
輸出
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
看下它的shape,其實是設(shè)置的時候自己輸入的,但是可以給把這個元組賦值給一個變量
tup=arr.shape
tup
輸出
(2, 2, 4)
tup的索引 [ 0,1,2 ] 就是3維數(shù)組arr的軸編號
下面轉(zhuǎn)換它
arr.transpose((1, 0, 2))
3維數(shù)組arr的1維(2軸)上是4個一維數(shù)組,每個1維數(shù)組都有一個由0,1兩個軸編號組成的索引 [ 0,0 ] , [ 0,1 ] , [ 1,0 ] , [ 1,1 ],transpose方法傳入的參數(shù)是軸編號 (1, 0, 2) 在就是把tup的索引順序改變成 [ 1,0,2 ] 也就是把 arr [ 0,1 ] 的一維數(shù)組變成 arr [ 1,0 ]
輸出
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
DataFrame的行和列
對于Pandas的DataFrame來說,因為擁有行和列的標(biāo)簽,所以只要能夠理解Excel就可以理解DataFrame的行和列行和列的等級關(guān)系
由嵌套字典構(gòu)成的DataFrame可以幫助我們理解
{'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
pandas就會被解釋為:外層字典的鍵作為列,內(nèi)層鍵則作為行索引,根據(jù)以往經(jīng)驗外層的維度比內(nèi)層高DataFrame的行
axis=0表示0軸,0軸上是一列行索引,當(dāng)函數(shù)傳入?yún)?shù)axis=0,就是根據(jù)行索引來操作數(shù)據(jù),可以看做同時操作幾列對齊索引的Series,例如:
1.排名:就是對每個Series分別排名,即每列單獨進(jìn)行排名
2.濾除缺失值:
默認(rèn)情況:如果有NaN值就按對應(yīng)索引,同時把幾個Series的該索引對應(yīng)的數(shù)據(jù)刪除,即一行里有一個NaN就把該行刪除
how=all:如果幾個Series相同的索引對應(yīng)的數(shù)據(jù)都為NaN,就刪除該索引對應(yīng)的數(shù)據(jù),即一行都為NaN就刪除該行
3.連接:就是將一個Series與另一個Series連接,同時對幾個Series進(jìn)行此操作,即將新數(shù)據(jù)連接在列方向DataFrame的列
axis=1表示1軸,1軸上是一行列索引,當(dāng)函數(shù)傳入?yún)?shù)axis=1,就是根據(jù)列索引來操作數(shù)據(jù),例如:
1.排名:每行單獨進(jìn)行排名
2.濾除缺失值:
默認(rèn)情況:一列里有一個NaN就把該列刪除
how=all:一列都為NaN就刪除該列
3.連接:將新數(shù)據(jù)連接在行方向按行或列取值
.iloc使用全是以0開頭的行號和列號,不能直接用其它索引哦。而.loc使用的實際設(shè)置的索引和列名。 這就是.loc和.iloc的區(qū)別。在實際運用中,我還發(fā)現(xiàn)一點區(qū)別,.iloc只能選取數(shù)據(jù)表里實際有的行和列,而.loc可以選取沒有的行和列,賦值后就可以添加新行或者列。
總結(jié)
以上是生活随笔為你收集整理的numpy 若干行和列_Numpy的轴,pandas的行和列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios 秒数转化为时间_iOS UTC秒
- 下一篇: 从未在一起更让人遗憾_擦肩而过的遗憾,远