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:无法将字符串转换为浮点数:'Mme'

ValueError:无法将字符串转换为浮点数:'62,6'

ValueError:无法将字符串转换为浮点数:''20,99''

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]

ValueError:无法将字符串转换为浮点数:'31,950'