我想将字符串(%)转换为float。但我的方法效果不佳。 结果与正确的数字略有不同。 例如,
a=pd.Series(data=["0.1%","0.2%"])
0 0.1%
1 0.2%
dtype: object
首先,我剥离"%"
a.str.rstrip("%")
0 0.1
1 0.2
dtype: object
我尝试转换为数字,但结果很奇怪。
我猜这种现象来自二进制数字系统......
pd.to_numeric(a.str.rstrip("%"))
0 0.10000000000000000555
1 0.20000000000000001110
dtype: float64
当然我无法将%转换为数字。
pd.to_numeric(a.str.rstrip("%"))/100
0 0.00100000000000000002
1 0.00200000000000000004
dtype: float64
我也试过.astype(float)方法。但结果是一样的..
为什么会出现这种现象?我该如何避免这种现象
答案 0 :(得分:2)
许多有理数不能完全表示为浮点数。特别是,任何必须在分母中具有五个因子的数字,如1 /(2 * 5),都不能准确表示。您无法做到这一点:要么对显示的数字进行舍入以使其看起来正确,要么使用无限精度库或有理数字库。这是对显示的数字进行舍入的基本方法:
>>> print "%.20f" % 0.1
0.10000000000000000555
>>> print "%.4f" % 0.1
0.1000
答案 1 :(得分:1)