如何阻止Pandas将Excel月-年格式表头转为日期格式?
解决Pandas读取Excel时强制保留月-年格式表头为字符串
方法1:先读取无表头数据,再手动设置字符串表头
这种方法先跳过表头读取所有数据,再提取第一行转为字符串作为表头,确保保留原格式:
import pandas as pd # 读取文件,不指定表头(所有行按数据处理) raw_data = pd.read_excel('test.xlsx', engine='openpyxl', header=None) # 提取第一行并转为字符串类型作为新表头 custom_header = raw_data.iloc[0].astype(str) # 从第二行开始取有效数据,并设置表头 df = raw_data[1:].copy() df.columns = custom_header
方法2:直接读取后将日期类型列名转为指定格式字符串
如果Pandas已将表头识别为datetime类型,可通过格式化日期对象转为你需要的月-年字符串:
import pandas as pd df = pd.read_excel('test.xlsx', engine='openpyxl') # 将datetime类型的列名格式化为"月-年"字符串(按需调整格式符) df.columns = [col.strftime("%m-%Y") for col in df.columns]
注意:格式符可按需调整,
%m是两位月份(01-12),%b是缩写月份名(Jan-Dec),%B是完整月份名,%Y是四位年份。
方法3:通过openpyxl获取单元格显示文本作为表头
如果Excel中表头是自定义格式的日期(底层存日期值但显示为月-年),直接用openpyxl读取单元格的显示文本,确保完全匹配Excel中的显示:
import pandas as pd from openpyxl import load_workbook # 用openpyxl加载工作簿,获取表头行的显示文本 wb = load_workbook('test.xlsx') ws = wb.active header = [cell.text for cell in ws[1]] # ws[1]代表第一行(表头行) # 读取Excel数据,跳过表头行 df = pd.read_excel('test.xlsx', engine='openpyxl', header=1) # 设置自定义表头 df.columns = header
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

