 <p>I'm afraid this "issue" happens in the Python (instead of pandas) side. When you have some instant values like <code>1234589890878708980.67</code> it's recognized as <code>float</code> and loses precision instantly, e.g.:</p> <pre><code>&gt;&gt;&gt; 1234589890878708980.67 1.234589890878709e+18 &gt;&gt;&gt; 1234589890878708980.67 == 1234589890878708980.6712345 True </code></pre> <p>You might try something like <code>decimal.Decimal</code>:</p> <pre><code>&gt;&gt;&gt; import decimal &gt;&gt;&gt; pd.DataFrame({'x': [decimal.Decimal('1234589890808980.67')]}) x 0 1234589890808980.67 </code></pre> <p><strong>EDITED:</strong></p> <p>OP's added a few questions in the comment.</p> <blockquote> <p>However, do I understand it right that for this method work correctly the value should be string in the first place?</p> </blockquote> <p>Yes :)</p> <blockquote> <p>What if it's float read from csv file?</p> </blockquote> <p>AFAIK Python's <code>csv</code> reader shall not have performed any type conversion, and you'll get strings that could be later converted freely. Otherwise if you're using <code>pandas.read_csv</code>, you could try setting the <code>dtype</code> and <code>float_precision</code> arguments (you could also ask pandas to load plain strings, and have the values converted later yourself).</p>