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

使用pd.read_excel读取Excel时时间信息丢失问题排查

问题分析与解决方案

核心问题

你的date字段丢失小时信息,根源是Excel源文件中该列的单元格格式被识别为日期格式,而非文本/纯数值格式。pd.read_excel读取时会自动将Excel的日期类型转换为仅包含日期部分的datetime对象,哪怕设置dtype=str也没用——因为Excel底层存储的是日期序列化值,不是原始的2010010100字符串。

解决办法

1. 读取时强制保留原始格式(推荐)

用pd.read_excel的converters参数,给date列指定自定义读取函数,确保拿到完整的原始格式字符串:

from datetime import datetime

def parse_date_cell(cell):
    if isinstance(cell, datetime):
        # 把Excel返回的datetime转回带小时的字符串
        return cell.strftime('%Y%m%d%H')
    # 处理原本就是字符串的情况
    return str(cell).strip()

# 读取文件时应用转换器
fileread = pd.read_excel(m, engine='openpyxl', converters={'date': parse_date_cell})

读取完成后,date列会保持2010010100格式,后续再用pd.to_datetime(..., format='%Y%m%d%H')转换就能得到包含小时的完整时间戳。

2. 修改源Excel文件的单元格格式

如果你有权限修改原始Excel文件,直接把date列的单元格格式改成文本格式,重新保存后再读取。这种方式最直接,后续读取无需额外处理参数。

3. 补救现有转换逻辑(仅适用于特定场景)

如果无法修改读取方式,且原始数据的小时部分多为00,可以从已丢失小时的日期反推,但通用性差:

# 替换原有的try-except代码块
monthlyo3['date'] = pd.to_datetime(
    monthlyo3['date'].dt.strftime('%Y%m%d') + '00',
    format='%Y%m%d%H'
)

内容的提问来源于stack exchange,提问作者박정도

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:11