numpy匯入資料集無法對列分割問題及解決方法

2021-10-24 12:54:15 字數 4051 閱讀 3807

三、參考資料

在對cm1資料集(用於defect prediction)預處理的時候,加上label一共是38個特徵,前37個是數字,label是,載入資料集後例項以元組儲存在陣列中,無法通過切片獲取前37個特徵。

載入資料集的**如下:

import numpy as np 

from math import pi

import os

from sklearn import preprocessing

path=os.path.split(os.path.abspath(__file__))

[0]filename=path+'/cleaned-cm1.txt'

dt=np.dtype([(

'loc_blank',float),(

'branch_count',float),(

'call_pairs',float),(

'loc_code_and_comment',float),(

'loc_comments',float),(

'condition_count',float),(

'cyclomatic_complexity',float),(

'cyclomatic_density',float),(

'decision_count',float),(

'decision_density',float),(

'design_complexity',float),(

'design_density',float),(

'edge_count',float),(

'essential_complexity',float),(

'essential_density',float),(

'loc_executable',float),(

'parameter_count',float),(

'halstead_content',float),(

'halstead_difficulty',float),(

'halstead_effort',float),(

'halstead_error_est',float),(

'halstead_length',float),(

'halstead_level',float),(

'halstead_prog_time',float),(

'halstead_volume',float),(

'maintenance_severity',float),(

'modified_condition_count',float),(

'multiple_condition_count',float),(

'node_count',float),(

'normalized_cylomatic_complexity',float),(

'num_operands',float),(

'num_operators',float),(

'num_unique_operands',float),(

'num_unique_operators',float),(

'number_of_lines',float),(

'percent_comments',float),(

'loc_total',float),(

'defective',str,1)])

# print(dt)

data_original=np.loadtxt(filename,dtype=dt,comments=

'@',delimiter=

',')

print(data_original.shape)

print(data_original[:3]

)#最小最大規範化

min_max_scaler=preprocessing.minmaxscaler(

)min_max_scaler.feature_range=

(0,10)

#切片data=data_original[:,0:-1]

print(data.shape)

**執行的結果如下:

[running] python -u "/users/schillerxu/documents/sourcecode/python/numpy_test/3.py"

(344,)

[( 6., 9., 2., 1., 0., 16., 5., 0.2 , 8., 2., 3., 0.6, 17., 1., 0., 24., 3., 32.54, 9.5 , 2936.77, 0.1 , 63., 0.11, 163.15, 309.13, 0.2 , 4., 8., 14., 0.16, 19., 44., 15., 15., 32., 4. , 25., 'n'

)(15., 7., 3., 1., 19., 12., 4., 0.13, 6., 2., 2., 0.5, 17., 1., 0., 31., 1., 38.55, 21.52, 17846.19, 0.28, 141., 0.05, 991.46, 829.45, 0.25, 3., 6., 15., 0.06, 51., 90., 32., 27., 67., 39.22, 32., 'y'

)(27., 9., 1., 4., 22., 16., 5., 0.15, 8., 2., 3., 0.6, 18., 1., 0., 29., 0., 52.03, 12.33, 7914.68, 0.21, 111., 0.08, 439.7 , 641.73, 0.2 , 4., 8., 15., 0.06, 37., 74., 33., 22., 83., 47.27, 33., 'y')]

traceback (most recent call last):

file "/users/schillerxu/documents/sourcecode/python/numpy_test/3.py", line 15, in

data=data_original[:,0:-1]

indexerror: too many indices for array

可以看到,每個示例以元組儲存在陣列中,而且切片的時候引數過多。

1、dtype

我們在定義dtype的時候,定義了每列的名字以及儲存的型別,同樣,也可以通過每列的名字獲取這列的資料。

print(data_original[

'loc_blank'

][0:3]

)

執行的效果如下:

剛好能獲取第一列的資料。

這種方法只能少量列的時候用,多了比較麻煩。

2、改變載入的方式

numpy.loadtxt()預設是以float儲存讀取的資料的,所以之前會提前自定義dtype,但是沒法切片操作。為了方便,可以先以str(字串)的形式儲存資料,然後把需要的資料切片轉換成需要的資料格式。

import sys

import numpy as np

path=sys.path[0]

filename=path+'/cleaned-cm1.txt'

data_original=np.loadtxt(filename,dtype=str,comments=

'@',delimiter=

',')

print(data_original[0]

)data=data_original[:,0:-1]

data=data.astype(float)

print(data.shape)

print(data[0]

)

執行的結果如下:

已經取得前37個特徵的資料。

python – 對numpy陣列中存在的元組中的列進行切片

實現資料匯入 匯入模式 匯入案列

匯入模式 模式 引數 說明 操作角色 full full 匯入整個資料庫 imp full database schema schmas 匯入使用者模式中的資料和元資料 imp full database table tables 匯入表和表分割槽的資料和元資料 imp full database ...

集算器匯入excel列數不對

集算器中能匯入excel檔案生成序表,file d employee3.xlsx importxls x 但是匯入時有可能出現,如果excel第一行為空的話,可能匯入的資料列數會少,比如excel中有174列,但是到集算器裡發現,只匯入了171列,經檢視,少匯入的那三列和前邊的也沒有區別。原因,如果...

Keras資料集匯入問題

keras 中文文件 當採用文件推薦方法即如下 匯入資料集時 from keras.datasets import fashion mnist x train,y train x test,y test fashion mnist.load data 如本例的fashion mnist 時尚物品資料...