ValueError:无法将字符串转换为浮点数:''20,99''
Posted
技术标签:
【中文标题】ValueError:无法将字符串转换为浮点数:\'\'20,99\'\'【英文标题】:ValueError: could not convert string to float: ''20,99''ValueError:无法将字符串转换为浮点数:''20,99'' 【发布时间】:2018-10-05 18:08:28 【问题描述】:我有一个这样的数据框,有 13000 行
print(df)
Date Price Nation
0 01/01/2018 -5.000,73 Spain
1 01/01/2018 15,60 Italy
3 01/01/2018 14,13 Italy
4 01/01/2018 12,53 Spain
5 01/01/2018 16,64 Italy
6 01/01/2018 22,48 Italy
7 01/01/2018 24,30 Italy
8 01/01/2018 24,88 Spain
9 01/01/2018 31,40 Italy
10 01/01/2018 18,74 Italy
价格列是non-null object
我删除了所有空格并删除了所有空行
我试图只使用从系列转换为字符串的价格列
string=df['Price'].to_string()
print(string)
0 -5.000,73
1 15,60
3 14,13
4 12,53
5 16,64
6 22.48
7 24.30
8 24.88
9 31.40
10 18.74
当我尝试时
string=string.strip('.')
string=string.replace(',','.')
float(string.strip().strip("'"))
系统返回错误信息:
ValueError: could not convert string to float: '0
-5.000.73\n1 15.60\n3 14.13\n4 12.53\n5 16.64\n6 22.48\n7 24.30\n8 24.88\n9 31.40\n10
数据从csv加载,分隔符为,
-
考虑到 \n7、\n10、...、\n160000 不会定期增加,我如何轻松转换为浮点数?
为什么会出现这种问题?
如果我用 Jupyter 或 excel 打开我的 csv,我看不到
/n32
,但只能看到类似 "01/01/2018","16,60","Spain"
,我知道 /n
用于提供垂直空间,但我没有不知道怎么处理,我注意到这和索引有关
我阅读了这些问题,尝试了其他解决方案,但都没有解决我的问题:
numpy.loadtxt, ValueError: could not convert string to float
ValueError: could not convert string to float: '-0,274697\n'
How do I parse a string to a float or int in Python?
Python convert string to float
Python. ValueError could not convert string to float:
ValueError: could not convert string to float in Pyspark
【问题讨论】:
只有一句话:你的字符串中没有n7
。有\n7
。那是不同的。 \n
是一个字符 - 换行符。
请从价格栏中再发布几行。您的错误显示了确定发生的情况可能需要的其他条目。尝试从 0 到 20 发布。
我看到 -5.000.73,这甚至是一个有效的浮点数吗?你想做什么?
与其他面额的货币不同,您需要使用句点作为小数点,并且不能使用逗号。正如@Prazy 所说,-5.000.73 不是一个有效的浮点数,由于 Python 解释器的工作方式,5,000 会给你 (5,0)(例如:5,132 会给你一个 (5,132)
的元组)
strip()
只影响开始和结束字符
【参考方案1】:
strip()
只删除前导和尾随字符。您可以改用replace()
来实现:
string = "-5.000,73"
string = string.replace('.', '')
string = string.replace(',', '.')
# float(string.strip().strip("'"))
float(string)
string.strip(s[, chars])
返回删除了前导和尾随字符的字符串副本。如果省略 chars 或 None,则删除空白字符。如果给定而不是 None,chars 必须是字符串;字符串中的字符将从调用此方法的字符串的两端剥离。
更多信息可以找到here
另外,我不知道你为什么还要去掉撇号,但它的语法应该是 string.replace(''', '')
;我会等到您完成剥离字符后再使用 float()
将其转换为浮点数。
顺便说一句,您可以在代码中使用打印语句来查看问题所在。一旦我粘贴了您的原始代码。很明显,第一个句点没有从字符串中删除。
【讨论】:
但是,string = "-5.000,73" string = string.replace('.', '') # 将替换 .在 5 之后,您的代码中的 string = string.replace(',', '.') 将两个逗号都替换为 '.' 你可以使用这个 string = string.replace(',', '.',1) string = -5.00,73 @Prazy 你需要更具体一点。除了他发布的内容之外,OP 没有提供任何真实数据可供使用。在这种情况下,我假设他试图删除句点,并将逗号转换为句点,以便以某种形式表示货币。 您写的答案将输出-5.000.73(无效)。 @Prazy 直接剪切和粘贴代码会在您将打印语句附加到末尾时产生 -5000.73。【参考方案2】:将数字列表转换为浮点数
numbers = [
'₹ 524.00',
'₹ 5,000.00',
'₹ 485.00',
'₹ 800.00',
'₹ 236.00',
'₹ 2,000.00',
'₹ 630.00',
'₹ 385.00',
'₹ 500.00',
'₹ 629.00',
'₹ 301.00',
'₹ 141.00',
]
numbers = [(num[2:]) for num in numbers]
numbers = [float(num.replace(',', '').strip()) for num in numbers]
print(f'Amounts in the list: numbers')
【讨论】:
以上是关于ValueError:无法将字符串转换为浮点数:''20,99''的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:无法将字符串转换为浮点数:'2100 - 2850'
ValueError:无法将字符串转换为浮点数:'62,6'
ValueError:无法将字符串转换为浮点数:''20,99''