如何在 Pandas 中将带有前导零的数据导出到 CSV 并保留前导零。

4

我有一个 Pandas 的数据框,其中一个列包含具有前导零的数据。 我希望将数据框以 CSV 格式导出并保留前导零。 因此,我尝试了以下代码:

import numpy as np
import pandas as pd
import os
os.chdir(path)
x=np.array(['0134','0567','0012','0009'])

df=pd.DataFrame(x,columns=['Test'])
df.dtypes
df.Test=df.Test.astype("str")
df.to_csv("leadingZero.csv")

但是在 leadingZero.csv 文件中,我发现一个列中的数值前导零被删除了,而另一个列中的0则保留了下来。

你能指导我如何在 CSV 中保留前导零吗?


应该按预期工作...您是在文本编辑器中打开 leadingZero.csv 吗?还是您可能在 Excel 中打开文件..? - Chris Adams
可能是Pandas csv导入:保留列中的前导零的重复问题。 - 0xPrateek
你是在用文本编辑器打开 leadingZero.csv 吗?真的吗?为什么你会问这样的问题呢?你觉得一个公司的高级管理层会用文本编辑器打开那个文件吗?... - Angelo
你是在用文本编辑器打开 leadingZero.csv 吗?真的吗?为什么你会问这样的问题呢?你认为一个公司的高级管理层会用文本编辑器打开那个文件吗?... - undefined
2个回答

2
这里的问题与csv文件有关。如果使用不同的格式(如wordpad,notepad等)打开csv文件,前导零将出现。
在您想保留前导零的列上使用apply('="{}".format)
import pandas as pd
df = pd.DataFrame({'Test': ['0134','0567','0012','0009']})
df['Test'] = df['Test'].apply('="{}"'.format)
df.to_csv('withLeadingZeros'+'.csv', index = False)

来自withLeadingZeros.csv的输出

enter image description here


这是最好的解决方案,相比于那些完全无用的答案,人们只是建议使用astype等等。非常感谢你。 - Angelo
这是最好的解决方案,相比于那些完全无用的答案,人们只是建议使用astype等等。非常感谢你。 - undefined

2
  • 保留前导零需要使用 df.Test.astype("str")
  • 要去除索引列,请在 to_csv 方法中使用: index=False
import numpy as np
import pandas as pd
x = np.array(['0134','0567','0012','0009'])
df = pd.DataFrame(x, columns=['Test']) df.Test = df.Test.astype("str") df.to_csv("leadingZero.csv", index=False)

输出结果 (leadingZero.csv):

Test
0134
0567
0012
0009

在办公应用程序中查看带前导零的 CSV 文件

如果您使用办公应用程序打开CSV文件,请将列选择为“文本”。我正在Ubuntu机器上使用Libre Office Calc

  • 打开CSV文件时,选择列为文本字段。

选择列为文本字段

  • 工作表将有前导零:

Libre Office 中带前导零的 CSV 文件

如果您使用 Microsoft Excel,请按照Microsoft 关于数字格式化为文本的文档进行操作。


1
我建议使用这个解决方案,因为它使用内部向量化函数,而Prateek Mishra的答案则是以逐元素方式使用lambda(不推荐)(也不推荐)。 - JE_Muc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接