how to convert string to numeric in python
<p>I would like to convert string (%) to float.but my method didnt work well.
the result slightly differ from correct number.
for example,</p>

<pre><code>a=pd.Series(data=["0.1%","0.2%"])

0    0.1%
1    0.2%
dtype: object
</code></pre>

<p>first, I strip "%"</p>

<pre><code>a.str.rstrip("%")

0    0.1
1    0.2
dtype: object
</code></pre>

<p>I tried to convert to numeric, but the result is strange.</p>

<p>I guess this phenomena come from binary digit system...</p>

<pre><code>pd.to_numeric(a.str.rstrip("%"))

0    0.10000000000000000555
1    0.20000000000000001110
dtype: float64
</code></pre>

<p>and of course I couldnt convert % to numeric.</p>

<pre><code>pd.to_numeric(a.str.rstrip("%"))/100

0    0.00100000000000000002
1    0.00200000000000000004
dtype: float64
</code></pre>

<p>I also tried .astype(float) method. but The result was same..</p>

<p>why this phenomena happen ? and how can I avoid this phenomena</p>

<p>Many rational numbers can't be represented exactly as a floating-point number. In particular, any number that has to have a five as a factor in the denominator, like 1/(2*5), can't be represented exactly. There isn't much you can do about this: either round the displayed number so it looks right, or use an infinite-precision library or a rational-numbers library. Here's a basic way to round the displayed number:</p>

<p><code>&gt;&gt;&gt; print "%.20f" % 0.1</code><br>
<code>0.10000000000000000555</code><br>
<code>&gt;&gt;&gt; print "%.4f" % 0.1</code><br>
<code>0.1000</code>  </p>

python pandas numpy floating-point