Arrays 将包含int和float列的csv文件中的文本加载到ndarray中
我有csv文件作为输入: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=",",
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代码处理这样的复合数据类型?我必须检查[[]]以外的数据类型是否可以处理其他数据类型,特别是[()],但我认为这是不太可能的,因为代码中有点积。