我正在使用大型混合型pandas DataFrame,在使用pandas.DataFrame.read_csv
编写然后重新读取文件后,有大量观察结果与文本文件中的原始值不匹配(或原始DataFrame)。如果我在文本编辑器中打开文本文件并找到特定值,则在读取后它将不匹配。
示例伪代码看起来像这样
# Hard code value found in text file, no additional digits
val = -2.631
# Re-read DataFrame
df = pd.read_csv('temp.csv', index=False)
print df.Var1.iloc[10]
... -2.6310000000000002
print df.Var1.iloc[10] == val
... False
感谢。
答案 0 :(得分:0)
问题是python存储浮动的方式。当您输入的字符串转换为内存中的数字时,会有一些精度损失。您可以使用十进制模块将字符串准确地转换为浮点数。
>>> val = -2.631
>>> val
-2.6309999999999998
>>> import decimal
>>> val = decimal.Decimal('-2.631')
>>> val
Decimal('-2.631')
>>> print val
-2.631
我怀疑Pandas有一些内置的处理花车的方法,但我不知道它是什么。
答案 1 :(得分:0)
我遇到了完全相同的问题。当我调用 to_csv()
时,它与 read_csv()
不匹配。
我发现是因为 pandas.fillna()
函数。
我们不能用“NA”来填充空值(可能是因为字母被保留了)
我检查了我填充空值的方式
df.fillna("NA")
更改要传递的字符串解决了问题。
df.fillna("Na")
或者你可以使用其他有意义的字符串
df.fillna("None")