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

如何在Python Pandas中将Excel导入的特殊格式日期列转为datetime类型?

解决方法

这个问题我之前也碰到过,核心就是Pandas读取Excel时没拿到单元格里存储的完整日期时间值,只读到了Excel显示用的短格式文本。不用改Excel,试试下面这几个方法:

1. 先调调pd.read_excel的参数

试试用openpyxl引擎(它对新版xlsx格式支持更好),同时指定要解析的日期列,让Pandas直接读原始值:

import pandas as pd

# 替换成你的文件路径,EventTS是你的日期列名
df = pd.read_excel('你的文件路径.xlsx', engine='openpyxl', parse_dates=['EventTS'])

这个方法大概率能直接解决,因为它会跳过Excel的显示格式,读取单元格里实际存储的完整日期时间。

2. 用openpyxl直接读单元格原始值

如果上面的方法不管用,那就绕开Pandas的自动解析,直接用openpyxl库读取每个单元格的真实值:

from openpyxl import load_workbook
import pandas as pd

# 加载你的Excel文件
wb = load_workbook('你的文件路径.xlsx')
ws = wb.active  # 假设数据在第一个工作表里

# 读取EventTS列的数据(假设列在第2列,第1行是表头,从第2行开始是数据)
event_ts_list = []
for row in ws.iter_rows(min_row=2, min_col=2, max_col=2, values_only=True):
    event_ts_list.append(row[0])

# 转成DataFrame再转成datetime类型
df = pd.DataFrame({'EventTS': event_ts_list})
df['EventTS'] = pd.to_datetime(df['EventTS'])

这种方式相当于直接从Excel里把日期时间对象拿出来,完全不受显示格式影响。

3. 从数值转成日期时间(如果列存的是Excel日期数值)

要是你的Excel日期是以浮点数形式存的(Excel里日期本质是从1899-12-30开始算的天数),可以先读成数值再转换:

import pandas as pd

# 先把列读成浮点数类型
df = pd.read_excel('你的文件路径.xlsx', dtype={'EventTS': float})
# 把浮点数转成datetime格式
df['EventTS'] = pd.to_datetime(df['EventTS'], unit='d', origin='1899-12-30')

4. 手动补全日期(实在没办法的最后一招)

如果上面的方法都不行,而且你知道所有记录对应的日期(比如你例子里的2019-05-02),那就把短格式的时分秒补成完整日期时间:

import pandas as pd

# 假设所有记录的日期都是2019-05-02,你的短格式是'MM:SS.0'
df['EventTS'] = pd.to_datetime('2019-05-02 ' + df['EventTS'].str.replace('.0', ''), format='%Y-%m-%d %M:%S')
# 如果你的短格式是'HH:MM.0',就把format改成'%Y-%m-%d %H:%M'

注意哈,这个方法只适合所有记录日期固定的情况,要根据你实际的字符串格式调整format参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:05:54