导出为 CSV 时,如何在列中保留前导零?

Posted

技术标签:

【中文标题】导出为 CSV 时,如何在列中保留前导零?【英文标题】:How can I keep leading zeros in a column, when I export to CSV? 【发布时间】:2017-05-05 13:32:16 【问题描述】:

我正在尝试导出带有前导零列的数据框,如下所示:

df["CD_LIN_NEG"]

0     001
1     001
2     004
3     001
4     001
5     001
6     003
7     006
Name: CD_LIN_NEG, dtype: object

但是当我导出到 csv 时,当我在 Excel 中打开文件时,所有前导零都会被截断任何数字。我怎样才能保持零?

我尝试转换为字符串,但它不起作用:

df["CD_LIN_NEG"] = df['T_PROD_CP.LN'].astype(str).apply(lambda x: x.zfill(3))

或者这样:

df["CD_LIN_NEG"] = '00' + df['T_PROD_CP.LN'].astype(str)

【问题讨论】:

这看起来像一个excel问题,pandas会保留前导零,您可以检查csv,更改excel中的显示格式 这是一个 excel 问题。如果您在记事本中打开文件,您会看到前面有零。 【参考方案1】:

这是@EdChum 建议的一个excel 问题。您需要使用apply('="".format) 将您的专栏包装在="" 中。这将告诉 excel 将条目视为返回引号内文本的公式。该文本将是带有前导零的值。

考虑以下示例。

df = pd.DataFrame(dict(A=['001', '002']))
df.A = df.A.apply('=""'.format)
df.to_excel('test_leading_zeros.xlsx')

【讨论】:

【参考方案2】:

这可能与问题没有直接关系,但如果数据是通过pandas.read_csv()pandas.read_excel() 从外部源读取的,那么我们可以使用str 为相关列指定converters

例如,

import pandas as pd

df = pd.read_excel(
    './myexcel.xlsx',
    converters=
        "serialno": str, # Ensure serialno is read as string, maintaining leading 0's
        "location": lambda x: '-' if x=='' else str(x),
    

df1 = pd.read_excel(
    './mycsv.csv',
    converters=
        "serialno": str, # Ensure serialno is read as string, maintaining leading 0's
        "location": lambda x: '-' if x=='' else str(x),
    

将数据保存到 Excel 或 CSV 文件时,会保留前导 0。

【讨论】:

【参考方案3】:

最简单的解决方案是在 Pandas 中读取 txtcsv 文件时添加 dtype=str

df = pd.read_csv(r'C:\my_folder\my_file.csv', dtype=str)

【讨论】:

添加 dtype=str 在我的情况下也适用于 pd.read_excel()。

以上是关于导出为 CSV 时,如何在列中保留前导零?的主要内容,如果未能解决你的问题,请参考以下文章

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

在 ssis 中导出到 csv 时包括前导零

如何在csv列中使用逗号[重复]

如何在 PHP 整数中保留前导零 [重复]

如何在 PHP 中解析 csv 在列中具有多行数据

Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?