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

如何将pandas.Timestamp类型序列与datetime.time类型序列合并?

高效合并pandas日期序列与时间序列的方法

我有一个格式为%Y-%m-%d的pandas.Timestamp类型序列,还有一个包含小时分钟信息的datetime.time类型序列,想要把两者合并成带小时的日期时间序列。示例输入如下:

from pandas import Series, Timestamp, to_datetime
import datetime

s1 = Series([Timestamp("2021-03-01"),Timestamp("2021-03-01")])
s2 = Series([datetime.time(0,0), datetime.time(0,15)])

目前我是先把两个序列转为字符串拼接,再转换为datetime类型,但觉得这种方法效率较低。请问有没有无需字符串转换的更高效方法?


方法1:datetime.combine结合apply(简单直观)

直接使用datetime.datetime.combine函数将日期对象和时间对象合并,通过apply逐行处理:

import datetime
from pandas import Series, Timestamp

s1 = Series([Timestamp("2021-03-01"),Timestamp("2021-03-01")])
s2 = Series([datetime.time(0,0), datetime.time(0,15)])

result = s1.combine(s2, lambda date, time: datetime.datetime.combine(date.date(), time))

这种方式实现简单,适合小型数据集,但apply本质是逐行循环,数据量较大时效率有限。

方法2:向量化时间差运算(高效推荐)

将时间序列转换为timedelta类型后,直接与日期序列相加,这是完全向量化的操作,效率远高于字符串拼接或逐行循环:

# 将datetime.time转换为timedelta
time_deltas = s2.apply(lambda t: datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second))
# 与Timestamp序列相加得到完整datetime
result = s1 + time_deltas

如果要进一步简化,也可以先把时间转为时分秒字符串,再用pd.to_timedelta生成时间差:

import pandas as pd

time_strings = s2.apply(lambda t: f"{t.hour}:{t.minute}:{t.second}")
time_deltas = pd.to_timedelta(time_strings)
result = s1 + time_deltas

这种向量化操作在处理十万级及以上规模的数据时,性能优势非常明显。

方法3:提取组件构造新Timestamp

直接提取Timestamp的年、月、日,结合time的时、分、秒,批量构造新的Timestamp序列:

import pandas as pd

result = pd.Series(
    [pd.Timestamp(year=d.year, month=d.month, day=d.day, hour=t.hour, minute=t.minute, second=t.second)
     for d, t in zip(s1, s2)]
)

该方法可读性较强,同样适合小型数据集,但本质仍是循环构造,大数据量下不如向量化方法高效。


内容的提问来源于stack exchange,提问作者Javier Hernández Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:20:50