Python 将str转换为float后,numpy数组返回字符串
我有一个包含多行的数据数组,如下所示:Python 将str转换为float后,numpy数组返回字符串,python,arrays,string,numpy,floating-point,Python,Arrays,String,Numpy,Floating Point,我有一个包含多行的数据数组,如下所示: ['20.57', '17.77', '132.9', ..., '0.07017', '0.1812', '0.05667'] 我需要把它转换成浮点数。 第一行是要素名称 当我尝试执行以下操作时: for i in features[1,:]: i = i.astype(np.float) floatfeatures = features[1:] floatfeatures = np.array(floatfeatures, dtype=fl
['20.57', '17.77', '132.9', ..., '0.07017', '0.1812', '0.05667']
我需要把它转换成浮点数。
第一行是要素名称
当我尝试执行以下操作时:
for i in features[1,:]:
i = i.astype(np.float)
floatfeatures = features[1:]
floatfeatures = np.array(floatfeatures, dtype=float)
并打印每个i,它打印浮动:
20.57
17.77
132.9
and so on
但是,当我打印“功能”时,我得到:
我做错了什么?如何解决这个问题?就这么做吧
features=features.astype(float)
执行i=i.astype(float)时,不会影响数组。
请记住,在数组上循环通常是个坏主意:使用数组方法来代替。只要这样做就行了
features=features.astype(float)
执行i=i.astype(float)时,不会影响数组。
请记住,在数组上循环通常不是一个好主意:改用数组方法。您可以通过创建一个新列表来做到这一点
features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.05667']
featuresFloat = []
for i in features:
featuresFloat.append(float(i))
print featuresFloat
这可能不是大型数据集的最佳解决方案,尽管它确实提供了可读代码您可以通过创建一个新列表来做到这一点
features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.05667']
featuresFloat = []
for i in features:
featuresFloat.append(float(i))
print featuresFloat
这可能不是大型数据集的最佳解决方案,尽管它确实提供可读代码,除非数组的
dype
是object
(不要这样做),或者您有一个结构化数组,不能有多个数据类型。因此,如果数组中有一个字符串,numpy将把它们全部转换为字符串
最好的办法是将阵列分成两部分
fNames=features[0,:]
features=features[1,:].astype(float)
如果有许多不同类型的列,可能需要将其强制转换为一个,除非数组的
dype
是object
(不要这样做),或者有一个结构化数组,不能有多个数据类型。因此,如果数组中有一个字符串,numpy将把它们全部转换为字符串
最好的办法是将阵列分成两部分
fNames=features[0,:]
features=features[1,:].astype(float)
如果您有许多不同类型的列,您可能希望将其转换为一个当我执行以下操作时,它工作正常:
for i in features[1,:]:
i = i.astype(np.float)
floatfeatures = features[1:]
floatfeatures = np.array(floatfeatures, dtype=float)
我不确定这是否是最优雅的方式,但它起了作用。当我做以下事情时,它起了作用:
for i in features[1,:]:
i = i.astype(np.float)
floatfeatures = features[1:]
floatfeatures = np.array(floatfeatures, dtype=float)
我不确定这是否是最优雅的方式,但它确实有效。从列表中创建一个更简单的数组:
In [26]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [27]: features
Out[27]: ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [28]: features = np.array(features)
In [29]: features
Out[29]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
但这并没有改变原来的特性
数组。它仍然是字符串
In [31]: features
Out[31]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
我可以直接从字符串列表转到具有以下内容的浮点数组:
In [34]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [35]: features = np.array(features,float)
In [36]: features
Out[36]:
array([ 2.05700000e+01, 1.77700000e+01, 1.32900000e+02,
7.01700000e-02, 1.81200000e-01, 6.67000000e-01])
但是如果列表中有任何字符串无法转换为浮点,我将得到一个错误或字符串数组
而且,我不能就地或零碎地进行更改
In [40]: features[1] = float(features[1])
In [41]: features
Out[41]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
[40]中的:特征[1]=浮动(特征[1])
在[41]中:特征
出[41]:
数组(['20.57','17.77','132.9','0.07017','0.1812','0.667'],
dtype='从列表中创建一个更简单的数组:
In [26]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [27]: features
Out[27]: ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [28]: features = np.array(features)
In [29]: features
Out[29]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
但这并没有改变原来的特性
数组,它仍然是字符串
In [31]: features
Out[31]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
我可以直接从字符串列表转到具有以下内容的浮点数组:
In [34]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667']
In [35]: features = np.array(features,float)
In [36]: features
Out[36]:
array([ 2.05700000e+01, 1.77700000e+01, 1.32900000e+02,
7.01700000e-02, 1.81200000e-01, 6.67000000e-01])
但是如果列表中有任何字符串无法转换为浮点,我将得到一个错误或字符串数组
而且,我不能就地或零碎地进行更改
In [40]: features[1] = float(features[1])
In [41]: features
Out[41]:
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'],
dtype='<U7')
[40]中的:特征[1]=浮动(特征[1])
在[41]中:特征
出[41]:
数组(['20.57','17.77','132.9','0.07017','0.1812','0.667'],
dtype='我有数千行。如果我做features[1,:]=np.array(features[1,:]).astype(float),它仍然返回字符串数组。即使我应用于整个数组,它仍然返回字符串。好的。你能给出features.dtype,features.shape,如果可能的话,还有关于features的链接吗?我有数千行。如果我做features[1,:]=np.array(features[1,:]).astype(float),它仍然返回字符串数组。即使我应用于整个数组,它仍然返回字符串。好的。你能给features.dtype,features.shape,如果可能的话,还有一个关于特性的链接吗。实际上,我刚刚做了类似的事情:floatfeatures=features[1:]floatfeatures=np.array(floatfeatures,dtype=float)事实上,我只是做了一些类似的事情:floatfeatures=features[1:]floatfeatures=np.array(floatfeatures,dtype=float)并且成功了。