【问题标题】:Pandas to_csv now not writing values correctlyPandas to_csv 现在无法正确写入值
【发布时间】:2018-12-05 01:02:54
【问题描述】:

我正在使用 csv 来保存如下所示的 datframe:

    PredictionIdx   CustomerInterest
0   fe789a06f3  0.654059
1   6238f6b829  0.654269
2   b0e1883ce5  0.666289
3   85e07cdd04  0.664172

其中我在第一列中有一个值“0e15826235”。我正在使用 pandas to_csv() 将此数据帧写入 csv。但是当我在 google excel 或 libreoffice 中打开这个 csv 时,它在 excel 中显示 0E,在 libreoffice 中显示 0。在 kaggle 提交期间给我带来了问题。但这里要注意的一点是,当我使用 pandas read_csv 读取相同的 csv 时,它会在数据框中正确显示上述值。

【问题讨论】:

  • 因为它在数据框中正确显示,所以从图书馆方面来说没有问题。应该是因为编辑。尝试使用df.to_excel()
  • 你从 kaggle 得到什么错误?你能发布一个有问题的 csv 文件的样本吗?

标签: python pandas csv numpy data-science


【解决方案1】:

如第一条评论所述,错误是由您选择的编辑器引起的。许多编辑会使用某种版本的科学记数法,它读取e(在特定位置,如第二个字符)作为指数的指示符。例如,Excel 会将其读取为“基数 X 的 Y 次幂”,其中 X 是 e 之前的数字,Y 是 e 之后的数字。 This is a brief description of Excel's scientific notation.

这不会发生在其他单元格条目中,因为似乎还有其他类似字符串的字符。 Excel、Libre 和可能的 Google 试图解释条目是什么,而不是从字面上理解。

在您的问题中,您使用单引号编写“0e15826235”,表示它可能是一个字符串,但这可能是在将值写入文件时需要确保的东西——Excel 和其他人可能不知道这一点意味着是一个字符串文字。

一般来说,检查值的格式并考虑您的最终编辑器在打开时可能“认为”它是什么。特别是对于 Excel,字符串开头的单引号字符将强制 Excel 将其作为字符串读取。见this answer

【讨论】:

  • 确实你是对的!编辑器不会解释为字符串文字。此外,如果我在该编辑器中保存我的文件,那么该文字将更改为编辑器之前解释的错误值。如果我们在文本编辑器中以csv格式打开就可以直接看到
【解决方案2】:

对我来说,下面的代码可以与谷歌电子表格一起正常工作:

import pandas as pd
df = pd.DataFrame({'PredictionIdx': ['fe789a06f3',
                                     '6238f6b829',
                                     'b0e1883ce5',
                                     '85e07cdd04'],
                   'CustomerInterest': [0.654059,
                                        0.654269,
                                        0.666289,
                                        0.664172]})

df.to_csv('./test.csv', index = None)

csv 也是非常简单的文本格式,它不包含任何有关数据类型的信息。 因此,您可以按照 Nihal 的建议使用 df.to_excel(),或者在您最喜欢的电子表格查看器中调整列类型设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2018-06-24
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多