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

Jul*_*era 5 python csv excel pandas

我试图导出一个带有前导零的列的数据帧,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

或以这种方式:

df["CD_LIN_NEG"] = '00' + df['T_PROD_CP.LN'].astype(str)
Run Code Online (Sandbox Code Playgroud)

piR*_*red 9

这是@EdChum建议的一个优秀问题.你会想在来包装你列=""apply('="{}".format).这将告诉excel将条目视为返回引号内文本的公式.该文本将是您的前导零值.

请考虑以下示例.

df = pd.DataFrame(dict(A=['001', '002']))
df.A = df.A.apply('="{}"'.format)
df.to_excel('test_leading_zeros.xlsx')
Run Code Online (Sandbox Code Playgroud)


yoo*_*ghm 5

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

例如,

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),
    }
Run Code Online (Sandbox Code Playgroud)

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