【问题标题】:Pandas read_csv/to_csv producing inconsistent results熊猫 read_csv/to_csv 产生不一致的结果
【发布时间】:2015-02-24 22:52:33
【问题描述】:

我正在使用大型混合类型的 pandas DataFrame,在使用 pandas.DataFrame.read_csv 写入然后重新读取文件后,有大量观察结果与文本文件中的原始值不匹配(或原始数据帧)。如果我在文本编辑器中打开文本文件并找到特定值,则读取后将不匹配。

示例伪代码如下所示

# 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

谢谢。

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:

    问题在于 python 存储浮点数的方式。将您输入的字符串转换为内存中的数字时,会损失一些精度。您可以使用十进制模块将字符串准确转换为浮点数。

    >>> val = -2.631
    >>> val
    -2.6309999999999998
    >>> import decimal
    >>> val = decimal.Decimal('-2.631')
    >>> val
    Decimal('-2.631')
    >>> print val
    -2.631
    

    我怀疑 Pandas 有一些内置的方法来处理浮点数,但我不知道它是什么。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。当我调用to_csv()时,它与read_csv()不匹配。

      我发现是因为pandas.fillna()函数。

      我们不能从字面上用“NA”填充空值(也许是因为字母是保留的)

      我检查了我填充空值的方式

        df.fillna("NA")
      

      更改要传递的字符串解决了这个问题。

        df.fillna("Na")
      

      或者你可以使用其他有意义的字符串

        df.fillna("None")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2012-10-04
        • 1970-01-01
        相关资源
        最近更新 更多