如何从dataframe中保存CSV,以在数字列中保留零?

2024-05-15 12:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在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,在只有数字的列中左边保留零?


Tags: columnscsvto数据代码infopandasobject
3条回答

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

我相信在其他应用程序中应该是类似的。

希望有帮助!

TLDR:如果pandas列是类型object,则无需执行任何操作

我觉得这里的两个答案,尤其是公认的答案,都是令人困惑的。简而言之,如果列的dtypeobject,那么pandas将用前导零来编写它。没什么可做的。

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

如果你这样做了,那么这两个答案都给出了如何在保留前导零时读回数据的指导。

如果没有,则在保存CSV时pandas中的数据类型不正确。仅仅使用astype更改该列不会恢复零。您还需要使用str.zfill,如本文SO answer.所述

读取csv文件时,将dtype指定为string,如下所示:

# 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')

相关问题 更多 >