Python 无法拆分从csv文件加载的阵列

Python 无法拆分从csv文件加载的阵列,python,arrays,python-3.x,csv,numpy,Python,Arrays,Python 3.x,Csv,Numpy,我使用Python3.6希望分割数组,但我发现我加载的数组没有第二维度 我使用: path1 = 'table1.csv' data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1) 当我尝试拆分它时,或者我想获得加载的形状时,我出错了: >>> data1.shape

我使用Python3.6希望分割数组,但我发现我加载的数组没有第二维度

我使用:

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)
我只想把向量分成第四列,但是因为x维是空的,所以我做不到。如何使阵列的形状像:

 (24999, 5)
如何获取第二维度并拆分阵列? 我希望分割数据并返回

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

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

实际上,由于设置了
轴=1
(这意味着您希望在第4列拆分向量),因此您希望将向量作为行向量。为什么不加上第二个维度呢?因此,你可能想这样做

>>> data1 = data1.reshape((1,data1.shape[0]))
>>> numpy.split(data1, (4,), axis=1)
或者,另一种解决方案是不设置
参数

>>> data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1)
>>> numpy.split(data1, (4,))
或者尝试不指定数据类型。您仍然可以在第二个处理阶段将ID转换为整数

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

如注释中所述,对于
dtype
,您有“行”和“字段”,但没有列。字段是通过名称而不是数字访问的。而
split
不能跨字段工作

您可以使用
data1['output']
访问第5个字段。您可以使用名称列表访问一组列,例如
data1[[['VAR1'、'VAR2'、'VAR3']]。copy()
。并非总是需要
副本
,但要准备好使用它

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


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

是的,我只想将向量拆分为第4列,但由于x维为空,我无法进行拆分。我编辑了问题,请刷新。我希望按列而不是按RAW进行拆分。我不能按您的方式进行拆分,这是因为实际上我的数据来自两个表而不是一个表,我需要联接两个表并获取完整参数,然后将其拆分为数组作为输入和输出。我需要data=numpy.lib.recfunctions.join_by('id',data1,data2,jointype='inner'usemack=False),如果“id”列未命名且不为int,计算机如何知道连接方式?@user504909。列名并不重要,因为您跳过了第一行,并且您仍然能够在第二个处理阶段将ID转换为整数。您将数据读取为结构化数组类型,因此它将是一维的。为什么不在不使用axis=1的情况下进行拆分呢?因为我希望按列而不是按行拆分@juanpa.Arrivillagab但您使用的是结构化数据类型,它将是一维的。顺便说一句,您到底想实现什么?我只想连接两个表,然后拆分它。如果我不使用结构化数据,表就无法知道联接的列。