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

Pandas导出CSV时如何保留数值型字符串的格式?

解决Pandas导出CSV时保留数值型字符串前导零的问题

这个问题我碰到过好多次了——本质上是因为CSV是无类型的纯文本格式,再加上Pandas导出时的默认逻辑,或者后续打开工具(比如Excel)的自动解析,会把看起来像数值的字符串(比如"0000")转成整数(0),导致前导零丢失。下面几个方法亲测有效:

1. 先确保DataFrame里的列确实是字符串类型

很多时候问题出在第一步:你以为已经把列设为字符串了,但实际上可能没生效。比如如果数据源是数值类型,直接转字符串才保险:

import pandas as pd

# 假设你的目标列是'code'
df['code'] = df['code'].astype(str)
# 如果需要固定长度(比如4位),用zfill自动补前导零
df['code'] = df['code'].str.zfill(4)

这一步一定要做,否则后面的导出操作都是白搭。

2. 导出时给字符串列加保护标记

方法A:用quoting参数强制加引号

Pandas的to_csv可以通过csv模块的参数,给非数值列加上双引号。这样CSV文件里的字符串会被引号包裹,不管是Excel还是其他工具打开,都会识别为文本:

import csv

# QUOTE_NONNUMERIC会给所有非数值类型的列加双引号
df.to_csv('output.csv', quoting=csv.QUOTE_NONNUMERIC, index=False)

导出后打开CSV文件,你会看到"0000"这样的内容,Excel打开时就不会转成数字了。

方法B:给字符串加前导单引号

如果主要是用Excel打开,给字符串前加一个单引号是个更“隐形”的办法——Excel会把单引号当成文本标记,不显示它,但会保留整个字符串的格式:

df['code'] = "'" + df['code']
df.to_csv('output.csv', index=False)

导出后Excel里显示的是0000,但CSV文件里实际存的是'0000,完美解决问题。

3. 给特定列指定导出格式

如果你的列是固定长度的字符串,还可以用formatters参数给列定制导出格式,确保输出符合要求:

# 给'code'列指定格式:如果是整数就转成4位带前导零的字符串,否则保持原样
formatters = {'code': lambda x: f'{x:04d}' if isinstance(x, int) else x}
df.to_csv('output.csv', formatters=formatters, index=False)

这个方法适合列里混合了整数和字符串的场景。

小提醒:有时候你以为导出后丢失了前导零,其实CSV文件里是存在的——只是Excel默认把它解析成了数字。可以用记事本打开CSV文件确认,如果里面是"0000"或者'0000,那就是打开工具的问题,不是导出的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:55:53