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

如何在Pandas读取带#0000000000格式的Excel列时保留前导零

保留Excel自定义格式列的前导零(Pandas读取时)

当Excel某列使用自定义格式#0000000000时,Pandas常规读取方式会丢失前导零——因为Excel实际存储的是数值,自定义格式仅为显示效果。以下是无需修改原Excel文件的解决办法:

方法1:读取单元格的显示文本(openpyxl引擎)

利用openpyxl直接获取单元格格式化后的显示值,而非底层存储的数值:

from openpyxl import load_workbook
import pandas as pd

wb = load_workbook("Formatted_File.xlsx")
ws = wb.active

# 提取所有行的格式化文本
data = []
for row in ws.iter_rows(values_only=False):
    row_content = []
    for cell in row:
        if cell.data_type == 'n':
            # 对数值型单元格,用自定义格式生成显示文本
            row_content.append(cell.number_format.format(cell.value))
        else:
            row_content.append(cell.value)
    data.append(row_content)

# 转为DataFrame,第一行作为列名
df = pd.DataFrame(data[1:], columns=[cell.value for cell in data[0]])

方法2:用转换器补全前导零

已知目标列的位置或名称时,通过converters参数读取后手动补零到指定长度(这里是10位):

import pandas as pd

def fill_leading_zero(x):
    return str(x).zfill(10)

# 按列索引指定(示例为第2列,索引从0开始)
df = pd.read_excel("Formatted_File.xlsx", converters={1: fill_leading_zero})

# 或者按列名指定(假设列名为"编号")
# df = pd.read_excel("Formatted_File.xlsx", converters={"编号": fill_leading_zero})

方法3:针对xls格式的xlrd引擎方案

如果是.xls格式文件,可借助xlrd的格式信息获取显示文本:

import xlrd
import pandas as pd

wb = xlrd.open_workbook("Formatted_File.xls", formatting_info=True)
ws = wb.sheet_by_index(0)

data = []
for row_idx in range(ws.nrows):
    row_content = []
    for col_idx in range(ws.ncols):
        cell = ws.cell(row_idx, col_idx)
        if cell.ctype == xlrd.XL_CELL_NUMBER:
            # 获取格式化后的显示文本
            row_content.append(wb.format_cell(cell))
        else:
            row_content.append(cell.value)
    data.append(row_content)

df = pd.DataFrame(data[1:], columns=data[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:19:59