Pandas read_excel错误转换日期,如何保留原始数据完整性?
解决pandas读取Excel时日期自动转换的问题
问题原因
即使设置了dtype=str和parse_dates=False,openpyxl引擎仍会将Excel中存储为日期类型的单元格解析为datetime对象——因为这些单元格在Excel内部是日期格式,pandas的参数无法覆盖openpyxl对单元格类型的解析逻辑,导致原始显示的日期字符串被转换为时间戳格式。
解决方案:直接读取Excel单元格的显示文本
要1:1还原原始数据,最可靠的方式是绕过pandas的自动解析,用openpyxl直接读取每个单元格的显示文本(即Excel界面中看到的内容)。
代码实现
import openpyxl import pandas as pd def read_excel_raw(file_path, skip_rows=0): # 加载工作簿,data_only=False保留公式(若需公式计算后的值则设为True) wb = openpyxl.load_workbook(file_path, data_only=False) sheet = wb.active # 跳过指定行数,从skip_rows+1行开始读取(Excel行号从1起始) rows = sheet.iter_rows(min_row=skip_rows + 1) # 提取每行单元格的显示文本 raw_data = [] for row in rows: row_values = [cell.display_value for cell in row] raw_data.append(row_values) # 构建DataFrame,保持无表头的原始结构 return pd.DataFrame(raw_data, header=None)
使用方式
替换原有的pd.read_excel调用,改用自定义函数读取文件:
df = read_excel_raw(file_path, skip_rows=skip_rows)
为什么这个方法有效?
cell.display_value会直接返回Excel界面中单元格显示的文本内容,无论单元格是日期、数字、字符串还是公式,都能完全还原原始显示格式,彻底避免自动类型转换带来的修改。
内容的提问来源于stack exchange,提问作者Scott Adamson
相关产品推荐
相关产品推荐

