You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas导出CSV时保留数据前导零?

解决Pandas导出CSV时FIPS代码前导零丢失的问题

问题原因澄清

首先要明确:用to_csv()导出的CSV文件本身是保留了前导零的,你看到的丢失现象大概率是用Excel打开文件时,Excel自动将类似数字的字符串识别为数值类型,从而去掉了前导零。你可以用纯文本编辑器(如VS Code、记事本)打开导出的test.csv,就能看到前导零其实还在。

解决办法

根据你的需求,分两种场景给出方案:

1. 确保CSV文件本身保留前导零(纯文本层面)

你的现有代码其实已经实现了这一点,导出的CSV文本里FIPS列是带前导零的字符串。如果需要验证,直接用文本编辑器打开文件即可。

2. 让Excel打开时自动保留前导零

如果需要让用户用Excel打开时也能看到前导零,可以用以下几种方法:

方法一:给FIPS列添加单引号前缀

修改DataFrame的FIPS列,在每个值前加单引号,Excel会将其识别为文本:

import pandas as pd
from io import StringIO

input_csv = "index,FIPS\n \
             1,01001\n \
             2,02001 "

df = pd.read_csv(StringIO(input_csv), dtype={'FIPS': str})
# 添加单引号前缀
df['FIPS'] = "'" + df['FIPS']
df.to_csv("test.csv", index=False)
方法二:使用引号包裹字符串

导入csv模块,设置quoting参数为csv.QUOTE_NONNUMERIC,让所有非数字字符串被引号包裹,Excel打开时会保留文本格式:

import pandas as pd
from io import StringIO
import csv

input_csv = "index,FIPS\n \
             1,01001\n \
             2,02001 "

df = pd.read_csv(StringIO(input_csv), dtype={'FIPS': str})
df.to_csv("test.csv", index=False, quoting=csv.QUOTE_NONNUMERIC)
方法三:直接导出为Excel文件并指定文本格式

如果可以导出为Excel格式(.xlsx),可以用to_excel()配合格式设置,确保FIPS列为文本类型:

import pandas as pd
from io import StringIO

input_csv = "index,FIPS\n \
             1,01001\n \
             2,02001 "

df = pd.read_csv(StringIO(input_csv), dtype={'FIPS': str})
# 使用xlsxwriter引擎,设置列格式
with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, index=False, sheet_name='Sheet1')
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    # 定义文本格式
    text_format = workbook.add_format({'num_format': '@'})
    # 设置FIPS列(第2列,索引从0开始是第1列)为文本格式
    worksheet.set_column(1, 1, None, text_format)

内容的提问来源于stack exchange,提问作者Ravi Shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:30