ValueError:无法将字符串转换为浮点型:“ 20,99”

时间:2018-10-05 18:08:29

标签: python string csv dataframe type-conversion

我有一个类似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加载的,分隔符为,

  1. 考虑到\ n7,\ n10,...,\ n160000没有定期增加,如何轻松转换为浮点数?
  2. 为什么我会遇到这种问题?
  3. 如果我使用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

1 个答案:

答案 0 :(得分:2)

strip()仅删除开头和结尾字符。您可以使用replace()代替:

string = "-5.000,73"
string = string.replace('.', '')
string = string.replace(',', '.')
# float(string.strip().strip("'"))
float(string)
  

string.strip(s [,chars])

     

返回除去前导和尾随字符的字符串副本。如果省略了char或None,则将删除空格字符。如果给定且不是None,则char必须是字符串;字符串中的字符将从调用此方法的字符串的两端剥离。

可以找到更多信息here

此外,我不确定您为什么还要尝试删除撇号,但是其语法应为string.replace(''', '');我会等到您完成使用float()剥离字符以将其转换为浮点数。

另一方面,您可以在代码中使用print语句查看出了什么问题。我一粘贴您的原始代码。显然,第一个句点并未从字符串中删除。