Python 使用numpy加载数据文件时出现问题

Python 使用numpy加载数据文件时出现问题,python,numpy,Python,Numpy,我想用scikit训练分类器,但首先我需要加载相应的数据。我正在使用中提供的以下数据文件: 当我在word中打开它时,它包含以下内容: ADT1_YEAST 0.58 0.61 0.47 0.13 0.50 0.00 0.48 0.22 MIT ADT2_YEAST 0.43 0.67 0.48 0.27 0.50 0.00 0.53 0.22 MIT ADT3_YEAST 0.64 0.62 0.49 0.15 0.50 0.00 0.53

我想用scikit训练分类器,但首先我需要加载相应的数据。我正在使用中提供的以下数据文件:

当我在word中打开它时,它包含以下内容:

ADT1_YEAST  0.58  0.61  0.47  0.13  0.50  0.00  0.48  0.22  MIT
ADT2_YEAST  0.43  0.67  0.48  0.27  0.50  0.00  0.53  0.22  MIT
ADT3_YEAST  0.64  0.62  0.49  0.15  0.50  0.00  0.53  0.22  MIT
AAR2_YEAST  0.58  0.44  0.57  0.13  0.50  0.00  0.54  0.22  NUC
每个文件用双空格分隔,每行用回车符分隔

我想用以下命令读取它:

f=open("yeast.data")
data = np.loadtxt(f,delimiter=" ")
最后,我希望能够使用以下内容:

X = data[:,:-1]  # select all columns except the last
y = data[:, -1]   # select the last column
使用:

X_train, X_test, y_train, y_test = train_test_split(X, y)
但是,当我尝试读取它时,会出现以下错误:

ValueError: could not convert string to float: ADT1_YEAST
那么,我如何在Python中读取此文件,以便稍后使用MLPClassizer呢


谢谢

您可以跳过
f=open(…)
,并且您可以使用
dtype='O'
确保
numpy
将其作为数字和字符串的混合读取。由于链接文件中的数据结构存在一些不一致之处,因此最好使用
genfromtxt
而不是
loadtxt

data = np.genfromtxt('yeast.data',dtype='O')

>>> data
array([[b'ADT1_YEAST', b'0.58', b'0.61', ..., b'0.48', b'0.22', b'MIT'],
       [b'ADT2_YEAST', b'0.43', b'0.67', ..., b'0.53', b'0.22', b'MIT'],
       [b'ADT3_YEAST', b'0.64', b'0.62', ..., b'0.53', b'0.22', b'MIT'],
       ..., 
       [b'ZNRP_YEAST', b'0.67', b'0.57', ..., b'0.56', b'0.22', b'ME2'],
       [b'ZUO1_YEAST', b'0.43', b'0.40', ..., b'0.53', b'0.39', b'NUC'],
       [b'G6PD_YEAST', b'0.65', b'0.54', ..., b'0.53', b'0.22', b'CYT']], dtype=object)

>>> data.shape
(1484, 10)
您可以在调用
genfromtxt
时更改数据类型(请参阅),也可以在执行以下操作后手动更改数据类型:

data[:,0] = data[:,0].astype(str)
data[:,1:-1]= data[:,1:-1].astype(float)
data[:,-1] = data[:,-1].astype(str)

>>> data
array([['ADT1_YEAST', 0.58, 0.61, ..., 0.48, 0.22, 'MIT'],
       ['ADT2_YEAST', 0.43, 0.67, ..., 0.53, 0.22, 'MIT'],
       ['ADT3_YEAST', 0.64, 0.62, ..., 0.53, 0.22, 'MIT'],
       ..., 
       ['ZNRP_YEAST', 0.67, 0.57, ..., 0.56, 0.22, 'ME2'],
       ['ZUO1_YEAST', 0.43, 0.4, ..., 0.53, 0.39, 'NUC'],
       ['G6PD_YEAST', 0.65, 0.54, ..., 0.53, 0.22, 'CYT']], dtype=object)

我没有看到我最初的解决方案给出了一个
(n,)
形状的数组。看看我的更新,我认为它是有效的。
usecols
参数将允许您分别加载字符串和浮点列。或者设置
dtype=None
以获得一个
结构化的
数组-1d,其中包含与文件列对应的字段。