Pandas导出DataFrame为CSV时如何保留文本列的前导零
保留DataFrame导出CSV时字符串列前导零的解决方案
首先提前校验目标列的类型,确认是字符串格式,避免上游类型转换导致前导零丢失:
# 查看列类型 print(df['你的目标列名'].dtype) # 若不是字符串/object类型,先执行转换 df['你的目标列名'] = df['你的目标列名'].astype('string')
不同场景的实现方案
- 场景1:仅用文本编辑器(记事本、VS Code等)打开CSV
直接使用默认导出逻辑即可,此时CSV文件内的原始值会完整保留前导零。你观测到的前导零丢失,绝大多数是Excel打开CSV时自动将纯数字字符串识别为数值类型导致的,并非导出阶段丢失。 - 场景2:需要用Excel打开CSV时也保留前导零
可选以下两种常用方式实现:- 给目标列追加不可见制表符,强制Excel识别为文本
df['你的目标列名'] = df['你的目标列名'] + '\t' df.to_csv('导出文件路径.csv', index=False, encoding='utf-8-sig')- 导出时指定非数值列自动加引号,需要引入csv模块的常量配置
quoting参数
import csv df.to_csv('导出文件路径.csv', index=False, encoding='utf-8-sig', quoting=csv.QUOTE_NONNUMERIC) - 场景3:不需要纯文本CSV格式,可直接导出为xlsx
直接导出为Excel格式可以从根源避免该问题,导出时指定目标列为文本格式即可:import pandas as pd writer = pd.ExcelWriter('导出文件路径.xlsx', engine='xlsxwriter') df.to_excel(writer, index=False, sheet_name='Sheet1') workbook = writer.book worksheet = writer.sheets['Sheet1'] # 定义文本格式 text_format = workbook.add_format({'num_format': '@'}) # 假设目标列是第2列(A列为第0列,按实际列索引调整前后两个参数) worksheet.set_column(1, 1, None, text_format) writer.close()
内容的提问来源于stack exchange,提问作者user16628047
相关产品推荐
相关产品推荐

