Python - 将字符串转换为浮点数(传统方法 float() 在这种情况下不起作用)

Mar*_* Jr 2 python type-conversion

在处理我们的一些数据时,我必须执行非常基本的列条件组合。填充空值后,尝试在分配新变量的列中添加。其中一列最终成为对象,这并非史无前例。然而,我发现看似有效的值不会转换为浮点数(例如 4,789.67)。经过多次搜索,似乎我所看到的每个解决方案都指向存在不规则字符(它没有描述我的情况)。因此,我尝试在 IPython 中进行实验以重现错误,并且我成功了。但是,我不明白为什么会出现此错误:

测试

z='4,534.07' #initial assignment
print z
print type(z) #checked type
print repr(z) #tried to reveal hidden characters
print repr(z.replace("'","")) #tried to remove excess quotes
print z[1:-1] #tried again to remove excess quotes
print float(z) #failed conversion attempt
Run Code Online (Sandbox Code Playgroud)

输出

4,534.07
<type 'str'>
'4,534.07'
'4,534.07'
,534.0


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-70-8a3c46ebe6ab> in <module>()
      6 print z[1:-1]
      7 print z
----> 8 print float(z)

ValueError: invalid literal for float(): 4,534.07
Run Code Online (Sandbox Code Playgroud)

我看到的基本转换问题的解决方案总是建议以下将“x”转换为 float -->> float(x)。如果有人能解释我遗漏了什么,我将不胜感激。(我以前没有发生过这种情况。)

我一直在使用Enthought平台:


发行说明 Canopy 1.0.0.1160

天篷 1.0.0

第一次发布。请参阅文档浏览器、Canopy 用户指南以获取描述新功能和任何已知问题和解决方法的发行说明


谢谢

aba*_*ert 5

唯一的问题是您必须删除逗号。4,534.07不是有效的浮点文字,但4534.07确实如此。

(这正是 theValueError: invalid literal for float(): 4,534.07告诉您的内容,只是它缺少“您的意思是……?”建议。)

所以:

z='4,534.07'
print float(z.replace(',', ''))
Run Code Online (Sandbox Code Playgroud)

此外,所有这些“删除多余引号”的尝试都不起作用,因为字符串中没有引号。当然,当您打印出repr字符串的时会有引号,但这并不意味着它们在字符串本身中,这意味着repr任何字符串的 都包含在一对额外的引号中。由于这些引号不在字符串中,因此它们不能影响您对该字符串调用的任何函数(除非该函数确实做了一些非常非常愚蠢的事情,例如调用repr其参数来构建要调用的字符串eval……)。

另外,即使问题多余的引号,只是print z[1:-1]print z.replace("'", "")实际上不会将它们从 中删除z,它也会打印出如果你这样做了它会是什么样子。要实际更改 的值z,您必须为其分配一些东西。例如,如果您添加print z.replace(',', '')到现有代码中,float(z)仍然会失败。但是如果你添加z = z.replace(',', ''),那么float(z)就会成功。