如何在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
相关产品推荐
相关产品推荐

