Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将str转换为float后,numpy数组返回字符串_Python_Arrays_String_Numpy_Floating Point - Fatal编程技术网

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)并且成功了。