熊猫to_csv现在无法正确写入值

时间:2018-06-26 10:29:20

标签: python pandas csv numpy data-science

我正在使用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。但是,当我在excel或libreoffice中打开此csv时,它在excel中显示0E,在libreoffice中显示0。在kaggle提交过程中给我带来了问题。但要注意的一点是,当我使用pandas read_csv读取同一csv时,它会在数据框中正确显示上述值。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以下对我来说,以下代码可与Google电子表格正确配合使用:

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(),或在您喜欢的电子表格查看器中调整列类型设置。