无法将对象转换为浮点型。最好的解决方法是什么?



我很难将对象转换为浮点。

df_final['INBCS'] = df_final['INBCS'].astype(float)

它一直在说:ValueError:无法将字符串转换为浮点值:"1620000">

如果我尝试不同的方法,我得到的大多是NAN结果。

print(pd.to_numeric(df_final['INBCS'], errors='coerce'))

我又尝试了一种方法,但仍然会出错。

df_final = df_final[df_final['INBCS'].apply(lambda x: x.isnumeric())]

数据中没有NAN;我已经把它们转换成零了。当我打印数据时,它显示逗号,但根本没有逗号。我甚至运行了一个替换函数来消除任何潜在的逗号,但同样,数据中没有逗号。知道这里出了什么问题吗?谢谢

无法将该字符串转换为浮点值的原因是Python不知道如何处理逗号。你可以很容易地复制:

>>> float('1,000')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '1,000'

只需删除逗号并解析数字是很诱人的,但存在国际化问题。在一些国家,逗号分隔数千(例如,"1000000"是一百万(。在其他国家,逗号分隔小数(例如,"1,05"是百分之一和百分之五(。

出于这个原因,如果你不能以原生形式获得这样的数字,最好使用本地化来解析它。

原因是因为那里有,,所以可以执行:

df_final['INBCS'] = df_final['INBCS'].replace(',','')
df_final['INBCS'] = df_final['INBCS'].astype(float)

应该起作用。

试试这个:

string = '1,620,000'
decimal = float(''.join(string.split(',')))
print(type(decimal), decimal)
# Prints (<type 'float'>, 1620000.0)

这首先使用split(',')去掉所有逗号,然后使用''.join()重新创建字符串。最后,它使用float()将整个内容转换为浮点值。

最新更新