如何在python中将字符串转换为数字

时间:2016-09-07 01:02:58

标签: python pandas numpy floating-point

我想将字符串(%)转换为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)方法。但结果是一样的..

为什么会出现这种现象?我该如何避免这种现象

2 个答案:

答案 0 :(得分:2)

许多有理数不能完全表示为浮点数。特别是,任何必须在分母中具有五个因子的数字,如1 /(2 * 5),都不能准确表示。您无法做到这一点:要么对显示的数字进行舍入以使其看起来正确,要么使用无限精度库或有理数字库。这是对显示的数字进行舍入的基本方法:

>>> print "%.20f" % 0.1
0.10000000000000000555
>>> print "%.4f" % 0.1
0.1000

答案 1 :(得分:1)

根据@ D-Von的建议,以下python包对您有用:decimalfractions

然后你可以做一些事情:

from fractions import Fraction
from decimal import Decimal
f = Fraction(1, 10)
d = Decimal('0.1')
f = f/100
d = d/100
str(d)

并且你一直没有使用花车而是使用有理数的数字。有关更多示例,请参阅文档。