Arrays 将包含int和float列的csv文件中的文本加载到ndarray中

Arrays 将包含int和float列的csv文件中的文本加载到ndarray中,arrays,python-2.7,csv,numpy,Arrays,Python 2.7,Csv,Numpy,我有csv文件作为输入: 6,148,72,35,0,33.6,0.627,50,1 1,85,66,29,0,26.6,0.351,31,0 8,183,64,0,0,23.3,0.672,32,1 1,89,66,23,94,28.1,0.167,21,0 它混合了int和float。 当我尝试使用“numpy.loadtext”导入文件时,我得到的是2d数组,每一列都是float r = np.loadtxt(open("text.csv", "rb"), delimiter=",",

我有csv文件作为输入:

6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
它混合了int和float。 当我尝试使用“numpy.loadtext”导入文件时,我得到的是2d数组,每一列都是float

r = np.loadtxt(open("text.csv", "rb"), delimiter=",", skiprows=0)
我收到了输出如:

array([[   6.   ,  148.   ,   72.   , ...,    0.627,   50.   ,    1.   ],
       [   1.   ,   85.   ,   66.   , ...,    0.351,   31.   ,    0.   ],
       [   8.   ,  183.   ,   64.   , ...,    0.672,   32.   ,    1.   ],
       ...,
       [   5.   ,  121.   ,   72.   , ...,    0.245,   30.   ,    0.   ],
       [   1.   ,  126.   ,   60.   , ...,    0.349,   47.   ,    1.   ],
       [   1.   ,   93.   ,   70.   , ...,    0.315,   23.   ,    0.   ]])
最好使用2d数组,列表中的每一行都有一个数组,而不是元组。 但是当查看数据类型时,每个列都被视为浮点,这是不正确的

我想问的是,是否有任何方法可以进行如下输出:
所需输出

array([[   6   ,  148   ,   72   , ...,    0.627,   50   ,    1   ],
       [   1   ,   85   ,   66   , ...,    0.351,   31   ,    0   ],
       [   8   ,  183   ,   64   , ...,    0.672,   32   ,    1   ],
       ...,
       [   5   ,  121   ,   72   , ...,    0.245,   30   ,    0   ],
       [   1   ,  126   ,   60   , ...,    0.349,   47   ,    1   ],
       [   1   ,   93   ,   70   , ...,    0.315,   23   ,    0   ]])
array([( 6, 148,  72, 35,   0,  33.6,  0.627, 50, 1),
       ( 1,  85,  66, 29,   0,  26.6,  0.351, 31, 0),
       ( 8, 183,  64,  0,   0,  23.3,  0.672, 32, 1),
       ( 1,  89,  66, 23,  94,  28.1,  0.167, 21, 0),
       ...,
       ( 1, 126,  60,  0,   0,  30.1,  0.349, 47, 1),
       ( 1,  93,  70, 31,   0,  30.4,  0.315, 23, 0)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4','<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')])
我确实尝试过这种方法:

r = np.loadtxt(open("F:/idm/compressed/ANN-CI1/Diabetes.csv", "rb"), delimiter=",", skiprows=0, dtype=[('f0',int),('f1',int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7',int),('f8',int)])
输出

array([[   6   ,  148   ,   72   , ...,    0.627,   50   ,    1   ],
       [   1   ,   85   ,   66   , ...,    0.351,   31   ,    0   ],
       [   8   ,  183   ,   64   , ...,    0.672,   32   ,    1   ],
       ...,
       [   5   ,  121   ,   72   , ...,    0.245,   30   ,    0   ],
       [   1   ,  126   ,   60   , ...,    0.349,   47   ,    1   ],
       [   1   ,   93   ,   70   , ...,    0.315,   23   ,    0   ]])
array([( 6, 148,  72, 35,   0,  33.6,  0.627, 50, 1),
       ( 1,  85,  66, 29,   0,  26.6,  0.351, 31, 0),
       ( 8, 183,  64,  0,   0,  23.3,  0.672, 32, 1),
       ( 1,  89,  66, 23,  94,  28.1,  0.167, 21, 0),
       ...,
       ( 1, 126,  60,  0,   0,  30.1,  0.349, 47, 1),
       ( 1,  93,  70, 31,   0,  30.4,  0.315, 23, 0)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4','<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')])
数组([(6148,72,35,0,33.6,0.627,50,1),
( 1,  85,  66, 29,   0,  26.6,  0.351, 31, 0),
( 8, 183,  64,  0,   0,  23.3,  0.672, 32, 1),
( 1,  89,  66, 23,  94,  28.1,  0.167, 21, 0),
...,
( 1, 126,  60,  0,   0,  30.1,  0.349, 47, 1),
( 1,  93,  70, 31,   0,  30.4,  0.315, 23, 0)],

dtype=[('f0','在第一种情况下,您会得到一个二维浮点数数组。在第二种情况下,是一个1d数组,具有结构化的dtype,是int和float的混合体。第一种情况中的哪些列现在是命名字段。结构化记录用()而不是[]标记

这两种形式都是有效和有用的。这取决于你需要做什么

当某些字段是字符串或其他不符合整数/浮点模式的内容时,结构化表单更有用。通常,您可以将整数作为浮点处理,而不会丢失任何功能


第一种情况下,all float到底有什么问题?哪一种最重要?命名列或列的范围(例如0:5、5:8)?

不可能创建一个包含不同类型值的numpy数组,如[[col1、col2、…、coln],]

numpy数组是同构的,换句话说,numpy数组只包含一种类型的值

In [32]: sio = StringIO('''6,148,72,35,0,33.6,0.627,50,1
    ...: 1,85,66,29,0,26.6,0.351,31,0
    ...: 8,183,64,0,0,23.3,0.672,32,1
    ...: 1,89,66,23,94,28.1,0.167,21,0''')

In [33]: r = np.loadtxt(sio, delimiter=",", skiprows=0)
In [34]: r.shape
Out[34]: (4, 9)
In [41]: r.dtype
Out[41]: dtype('float64')
上面这条线创建了一个二维浮点数数组,它的形状是4x9

In [36]: r = np.loadtxt(sio, delimiter=",", skiprows=0, dtype=[('f0',int),('f1'
    ...: ,int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7'
    ...: ,int),('f8',int)])
In [38]: r.shape
Out[38]: (4,)
In [45]: r.dtype
Out[45]: dtype([('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')])
[36]中的
:r=np.loadtxt(sio,delimiter=“,”,skiprows=0,dtype=[('f0',int),('f1'
…:,int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7'
…:,int),('f8',int)])
在[38]:r形
Out[38]:(4,)
In[45]:r.dtype

Out[45]:数据类型([('f0','为什么您需要这个表单?
(…)
是对象数组的结果,我认为。更改下一个命令可能会更容易,在下一个命令中,使用这种格式可能会遇到困难。我正在尝试使用反向传播为单层神经网络构建代码,因此这是我的开始步骤,下一步我要做的显然是拆分,然后调用训练d预测,
train,test=train\u test\u split(scale\u inp,test\u size=0.25)#将数据拆分为测试和train
,然后
train\u X=np.数组(train[:,0:8])
。如果我能做到这一点,我想在train dot product中再做一次,这会给我带来问题。在网络中,整数与浮点数的关系有什么重要?在编辑中添加长的加法而不是注释。在编辑中更容易阅读。对于训练/测试拆分,这是按列还是按行进行的?整数v浮点数重要吗?lear可以吗ning代码处理这样的复合数据类型?我必须检查[[]]以外的数据类型是否可以处理其他数据类型,特别是[()],但我认为这是不太可能的,因为代码中有点积。