无法拆分从csv文件加载的数组

时间:2017-05-15 02:13:35

标签: python arrays python-3.x csv numpy

我使用python 3.6想要分割数组,但我发现我加载的array它没有第二个维度。

我用:

path1 = 'table1.csv'
data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1)

当我尝试拆分它,或者我想得到我加载的形状时,我错了:

>>> data1.shape
(24999,)

因为它没有第二维,所以我不能使用

>>>numpy.split(data1, (4,), axis=1)

我只想将矢量分割为第4列,但是x维度是空的,我不能这样做。如何使数组的形状像:

 (24999, 5)

如何获取第二个维度并拆分数组? 我希望分割数据并返回

x,y=np.split(data, (4,), axis=1)

x是x1,x2 x3 ...带参数,y是结果,然后我可以从x学习模型。

2 个答案:

答案 0 :(得分:1)

正如评论中所述,使用dtype您有'行'和'字段',但不是列。字段按名称访问,而不是数字。并且split不适用于各个字段。

您可以使用data1['OUTCOME']访问第5个字段。您可以访问一组带有名称列表的列,例如。 data1[['VAR1','VAR2','VAR3']].copy()copy并不总是需要,但我已准备好使用它。

或者,使用usecols分两步加载文件以选择不同的列。相应地调整dtype

或者使用dtype=float加载,并获得一个(n,5)浮点数组。然后你可以进行列拆分。

答案 1 :(得分:0)

实际上,您似乎希望将矢量设置为行向量,因为您设置了axis=1(这意味着您要将其拆分为第4列)。为什么不添加第二个维度?你可能想要做

>>> data1 = data1.reshape((1,data1.shape[0]))
>>> numpy.split(data1, (4,), axis=1)

或者,另一种解决方案是,不设置axis参数

>>> data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1)
>>> numpy.split(data1, (4,))

或者尝试不指定dtype。您将能够在第二个处理阶段将您的ID转换为整数。

>>> data1 = np.loadtxt(path1, delimiter=',', skiprows=1)