【问题标题】:How to save a CSV from dataframe, to keep zeros left in column with numbers?如何从数据框中保存 CSV,以在带有数字的列中保留零?
【发布时间】:2018-07-31 20:42:29
【问题描述】:

在 Python 3 和 pandas 中,我有一个数据框,其中有一列 cpf 带有代码

candidatos_2014.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 26245 entries, 0 to 1063
Data columns (total 7 columns):
uf                 26245 non-null object
cargo              26245 non-null object
nome_completo      26245 non-null object
cpf                26245 non-null object
nome_urna          26245 non-null object
partido_eleicao    26245 non-null object
situacao           26245 non-null object
dtypes: object(7)
memory usage: 1.6+ MB

代码是这样的数字:“00229379273”、“84274662268”、“09681949153”、“53135636534”...

我保存为 CSV

candidatos_2014.to_csv('candidatos_2014.csv')

我使用 Ubuntu 和 LibreOffice。但是当我打开文件时 cpf 列不显示前导零:

"229379273", "9681949153"

请问,有没有办法保存一个 CSV,在只有数字的列的左侧保持零?

【问题讨论】:

  • 这可能会有所帮助。 stackoverflow.com/questions/13250046/…
  • 谢谢。我这样使用它:candidatos_2014.to_csv('candidatos_2014.csv', converters={'cpf': lambda x: str(x)}
  • 但是出现了错误:------------------------ -------------------------------------- TypeError Traceback (最近一次调用最后一次) in () ----> 1 candidatos_2014.to_csv('candidatos_2014.csv', converters={'cpf': lambda x: str(x)}) TypeError: to_csv() got an意外的关键字参数“转换器”
  • 你的熊猫版本是什么?
  • 我使用 Python 3.6。我刚刚安装了“pip install pandas”

标签: python pandas csv


【解决方案1】:

在读取 csv 文件时将 dtype 指定为字符串,如下所示:

# if you are reading data with leading zeros
candidatos_2014 = pd.read_csv('candidatos_2014.csv', dtype ='str')

或将数据列转换为字符串

# if data is generated in python you can convert column into string first
candidatos_2014['cpf'] = candidatos_2014['cpf'].astype('str')
candidatos_2014.to_csv('candidatos_2014.csv')

【讨论】:

  • 谢谢。它是一个生成的数据框。我用过:candidatos_2014['cpf'] = candidatos_2014['cpf'].astype('str')
  • candidatos_2014.info() -> cpf 26245 非空对象
  • 我用命令保存:candidatos_2014.to_csv('candidatos_2014.csv')
  • 我也在使用 LibreOffice,但我正在获取带有前导零的数据。
  • 无论如何,在 LibreOffice 打开屏幕中,我选择了列类型作为“cpf”列中的文本,它打开了。之前,开头的屏幕上没有出现前导零。非常感谢
【解决方案2】:

首先,确保 csv 文件中的输出不包含零。 如果是这样,但您在 Excel 或其他电子表格中打开该文件,您有时仍然可以看到没有前导零的值。 在这种情况下,转到数据菜单,然后导入表单文本。 Excel 的导入实用程序将为您提供定义每列数据类型的选项。

我确信它在其他应用中应该是类似的。

希望对你有帮助!

【讨论】:

    【解决方案3】:

    TLDR:如果您的 pandas 列类型为 object

    ,您无需执行任何操作

    我觉得这里的两个答案,尤其是公认的答案,都令人困惑。简短的回答是,如果您的专栏的dtypeobject,那么pandas 将用前导零写入它。没什么可做的。

    如果像我一样,你来到这里是因为你不确定,当你打开 CSV 时,前导零已经消失,然后按照 Ivan S 的建议 - 看看你写的文件来验证,但您应该在那里看到前导零。

    如果您这样做了,那么这两个答案都提供了有关如何在保留前导零的情况下读回数据的指导。

    如果您不这样做,那么当您保存 CSV 时,pandas 中的数据类型不正确。仅使用 astype 更改该列不会恢复零。您还需要使用str.zfill,如SO answer.中所述

    【讨论】:

      【解决方案4】:

      如果这对某人有帮助,我利用 to_excel() 方法而不是 to_csv() 这似乎已经解决了问题(当您在 Excel 中打开 CSV 时,Microsoft Excel 会破坏前导零)。不过,假设您在数据本身中保留了前导零。

      【讨论】:

        猜你喜欢
        • 2019-10-25
        • 1970-01-01
        • 2014-09-28
        • 2021-05-16
        • 2017-08-02
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        相关资源
        最近更新 更多