Pandas read_csv / to_csv产生不一致的结果

时间:2015-02-24 22:52:33

标签: python python-2.7 pandas

我正在使用大型混合型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

感谢。

2 个答案:

答案 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")