ValueError:无法将字符串转换为float:'“”'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ValueError:无法将字符串转换为float:'“”'相关的知识,希望对你有一定的参考价值。
我有一些值是csv文件和在csv文件中一些值是数字,一些是字符串数字。 csv文件示例:
1,"1151226468812.22",100,1,467,999.00,999.95,15,1,999.00,999.95,998.50,999.95,15,999.01,1396,34,06092016091501.444,1394627.25
2,"1151226468812.11",100,1,467,999.00,1000.00,1605,3,999.00,1000.00,998.50,1000.00,5,999.03,1426,37,06092016091502.111,1424626.50
所以我想将字符串转换为float。所以这是我的代码:
datareader = csv.reader(datafile, delimiter=",", quoting= csv.QUOTE_NONE)
names = []
names.append("local_timestamp")
names.append("nse_timestamp")
for row in datareader:
data = dict()
data.update(local_timestamp = row[0])
data.update(nse_timestamp = float(row[1]))
但它返回值错误。
ValueError: could not convert string to float: '"1151226468812.22"'
问题是你的字符串不只是'1151226468812.22'
,而是'"1151226468812.22"'
。它还包含语音标记("
)。这意味着在将其转换为浮点数之前,您需要删除前导和尾随语音标记。幸运的是,Python有一个非常方便的字符串方法.strip()
为你做这个。
string.strip(s)
将返回一个字符串,其中删除了前导和结尾的's'
字符
例如:
myString = "#hello#".strip("#")
在这段代码中,myString
将只是'hello'
在这种情况下,您要删除前导和尾随row[1]
字符的"
。你可以很容易地做到这一点:
row[1].strip(""")
很明显,双引号导致问题,Python只能将一串数字(和小数符号)转换为浮点数。
删除双引号的一种方法是使用正则表达式。这允许您运行相同的代码,无论输入是否具有双引号:
import re
print(float(re.split(r'["]?([0-9.]*)["]?','1151226468812.22')[1]))
print(float(re.split(r'["]?([0-9.]*)["]?','"1151226468812.22"')[1]))
输出:
1151226468812.22
1151226468812.22
这个正则表达式将匹配:
["]?
是一个起始双引号,如果存在(?
负责)。- qazxsw poi一系列任意长度的数字或点字符(qazxsw poi负责后者)。
[0-9.]*
结束双引号,如果存在的话。
它返回一个长度为3的列表,其中第二个项目包含该数字。然后可以将其转换为浮点数。
尝试使用以下内容:
*
要么
["]?
这将删除双引号,现在您可以将字符串转换为浮点数。
csv中的第二个字段引用了for row in datareader:
data = dict()
data.update(local_timestamp = row[0])
data.update(nse_timestamp = float(row[1].replace('"', '')))
。在csv中,引用字段并不意味着它们是字符串,而是字段可以包含分隔符,如for row in datareader:
data = dict()
data.update(local_timestamp = row[0])
data.update(nse_timestamp = float(row[1].strip('"')))
。
阅读此类数据的正确方法是告诉读者可以引用一些字段:
"
这将返回没有引号的第二个字段并解决您的问题。
之后删除引号不仅会增加额外的工作量,而且如果字段包含分隔符,也会导致错误。例如,"123,45"
会将datareader = csv.reader(datafile, delimiter=',', quotechar='"')
和"123,45"
作为两个不同的领域返回。
以上是关于ValueError:无法将字符串转换为float:'“”'的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:无法将字符串转换为float:matrix文件
sklearn OneHotEncoder broken- ValueError:无法将字符串转换为float
One Hot Encoding:ValueError:无法将字符串转换为float:'是'
ValueError:无法将字符串转换为浮点数:'62,6'