numpy處理資料時一些常用函式

2021-10-04 13:21:32 字數 4256 閱讀 3911

我們以iris.data.舉例,下面是iris資料集(取前6行),其中前4列是特徵,第5列是類別,有三類,分別是iris-setosa,iris-versicolor和iris-virginica

iris.data

5.1,3.5,1.4,0.2,iris-setosa

4.9,3.0,1.4,0.2,iris-setosa

4.7,3.2,1.3,0.2,iris-setosa

4.6,3.1,1.5,0.2,iris-setosa

5.0,3.6,1.4,0.2,iris-setosa

5.4,3.9,1.7,0.4,iris-setosa

下面給出載入這個資料集的**,再對其中的引數進行解釋

path = 'iris.data'

np.loadtxt(path, dtype=float, delimiter=',', converters=)

引數:path:要載入的資料檔案路徑

dtype:資料型別,如果不寫python預設為雙精度浮點數

delimiter:載入檔案中的分隔符

重點說一下converters,可以看到檔案中類別那一列是字串,但其實我們想要的肯定是數字,所以converters的作用其實就是把某一列的資料型別進行改變,iris_type是自定義的函式:

def iris_type(s):

it =

return it[s]

並且如果不用converters直接讀入需要重新設定dtype:效果如下:

data = np.loadtxt(path, dtype=, delimiter=',')

輸出結果:

[(5.1, 3.5, 1.4, 0.2, b'iris-setosa') (4.9, 3. , 1.4, 0.2, b'iris-setosa')

(4.7, 3.2, 1.3, 0.2, b'iris-setosa') (4.6, 3.1, 1.5, 0.2, b'iris-setosa')

(5. , 3.6, 1.4, 0.2, b'iris-setosa') (5.4, 3.9, 1.7, 0.4, b'iris-setosa')

(4.6, 3.4, 1.4, 0.3, b'iris-setosa') (5. , 3.4, 1.5, 0.2, b'iris-setosa')

(4.4, 2.9, 1.4, 0.2, b'iris-setosa') (4.9, 3.1, 1.5, 0.1, b'iris-setosa')

(5.4, 3.7, 1.5, 0.2, b'iris-setosa') (4.8, 3.4, 1.6, 0.2, b'iris-setosa')……

可以看到字串前有個b,這是因為np.loadtxt和np.genfromtxt在位元組模式下執行,這是python2中的預設字串型別。但是python3使用unicode,並用b標記位元組字串。如果一定要用這種方式,就需要單獨取出那一列然後在後面加上np.loadtxt(…).astype(str)

此外若是需要做視覺化,就只需要二維的資料,那麼只需要其中第0,1,4列的資料,**如下:

np.loadtxt(path, dtype=float, delimiter=',', usecols=(0, 1, 4), converters=)

輸出結果:

[[5.1 3.5 0. ]

[4.9 3. 0. ]

[4.7 3.2 0. ]

[4.6 3.1 0. ]

[5. 3.6 0. ]

[5.4 3.9 0. ]

若是需要跳過前n行,就需要設定skiprows=n

data = np.loadtxt(path, dtype=float, delimiter=',', converters=, skiprows=1)

輸出結果:

[[4.9 3. 1.4 0.2 0. ]

[4.7 3.2 1.3 0.2 0. ]

[4.6 3.1 1.5 0.2 0. ]

[5. 3.6 1.4 0.2 0. ]

[5.4 3.9 1.7 0.4 0. ]

[4.6 3.4 1.4 0.3 0. ]

不常用引數:

comment='#', 若某一行開頭為#,就跳過該行

這三個函式功能幾乎相同,接下來一一介紹

np.zeros

np.zeros(shape,  dtype=float, order='c')

功能:建立乙個形狀為shape的全為0的陣列

引數:shape:資料形狀,(2,4)代表2行4列

dtype:資料型別,預設為float

order:可選引數『c』和『f』,代表資料儲存方式

np.ones

np.ones(shape,  dtype=float, order='c')

功能:建立乙個形狀為shape的全為1的陣列,其他和zeros一樣

np.full

np.full(shape, fill_value, dtype=none, order='c')

功能:建立乙個形狀為shape的值為fill_value的陣列

引數:fill_value:填充到陣列中的值,若fill_value填0和1其實功能和就和zeros和ones一樣,它更加適用於各種情況

np.empty語法如下:

np.empty(shape[, dtype, order]) 

功能:建立乙個給定形狀的空陣列

引數:和np.zeros一樣

這個函式看似和np.zeros差不多,但還是有需要注意的地方,下面看例子

np.empty(shape=5)

輸出:array([1.12152902e-321, 3.37112413e-316, 3.37112413e-316, 2.12199579e-314,

4.78421354e-317])

可以看到,它並不是乙個空的陣列,它返回的乙個隨機元素的矩陣

如果不確定具體需要多少行或多少列,下面以不清楚行舉例

就可以建立

np.empty(shape=[0, 19])

功能:

向arr裡加入values

引數:arr:需要被新增的陣列

values:向陣列裡新增的值

axis:如果不指定axis,將會把arr鋪平為一維陣列,然後向裡面新增value,若指定axis,需要values和arr有相

同的行數或列數,如果axis=0,新增一行,如果axis=1,新增一列

因為要處理的資料大多為二維陣列,所以講一下切片具體以及簡便一點的寫法,以下**以iris為例

切片標準格式:

data[:,:]

逗號表示分隔,可以看成逗號前是行,逗號後是列

data[0:1,:]

意思:取第0行所有列

輸出:[[5.1 3.5 1.4 0.2 0. ]]

data[:,0:1]

意思:取第0列所有列=行

輸出:[[5.1]

[4.9]

[4.7]

[4.6]

[5. ]

[5.4]

[4.6]...

data[:,:2]

意思:取data前兩列所有行,0在其中可以省略

data[...,:2]

...:省略號也可以代表從頭取到尾,和上面意思一樣

np.c_[a,b]

功能:將a和b按列的方式組合在一起

例子:np.c_[[1,2,3],[4,5,6]]

輸出:array([[1, 4],

[2, 5],

[3, 6]])

np.r_[a,b]

功能:將a和b按行的方式組合在一起

例子:np.r_[[[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]]]

輸出:array([[1, 2, 3],

[4, 5, 6],

[1, 2, 3],

[4, 5, 6]])

值得注意的是下面這個例子:

np.r_[[1,2,3],[4,5,6]]

輸出:array([1, 2, 3, 4, 5, 6])

資料預處理時的一些基本操作

1 刪除某一列 df.drop 列名,axis 1 刪除列 inplace true 對原dataframe進行操作 2 判斷哪一列有空值 df.isnull any 如果有空值 則該列返回true,否則返回false 3 刪除值含空的資料 df.dropna 引數how預設為any 如果該行資料有...

安裝numpy時遇到的一些問題

import sklearn.datasets.make moons時 報錯 modulenotfounderror no module named numpy.testing.nosetester 原因 numpy sklearn scipy joblib版本不相容。解決方法 將所有的包都更新到最...

處理作業時一些注意2

如果3d遊戲中按基於多邊形來構建遊戲引擎而不是基於光纖追蹤 它可以很快的構建3d場景 在計算漫反射時,從邏輯上講是光能量衰減 材質吸收 然後在計算在平面外法線向量的投影,2.建立sin cos查詢表 目的 用初始化時間換得執行時更快的查詢效率 3.碰撞檢測也是屬於執行時遊戲引擎遊戲性系統部分 深有體...