如何合并Pandas DataFrame的日期列与时间列生成新datetime列?
解决Pandas合并日期和时间列的问题
嘿,我来帮你搞定这个合并日期和时间列的需求!根据你描述的情况——Date是datetime64[ns]类型(实际是Timestamp对象),Time Start (UTM)是object类型但底层是datetime.time对象,这里有两种靠谱的方法:
方法1:直观的逐行处理(适合小数据集)
这种方法逻辑简单,直接把日期和时间转成字符串拼接后再转回datetime:
df['New Column'] = df.apply( lambda row: pd.to_datetime(f"{row['Date'].date()} {row['Time Start (UTM)']}"), axis=1 )
原理是:row['Date'].date()提取出纯日期部分(比如2018-04-10),和时间字符串(比如13:03:00)拼接后,用pd.to_datetime转成完整的datetime对象。
方法2:高效的向量运算(适合大数据集)
如果你的DataFrame行数很多,逐行apply效率会偏低,推荐用时间差的方式来合并,速度快很多:
# 先把时间列转成timedelta类型 df['time_delta'] = pd.to_timedelta(df['Time Start (UTM)'].astype(str)) # 提取Date的纯日期部分,加上时间差得到完整datetime df['New Column'] = df['Date'].dt.floor('D') + df['time_delta'] # 可选:删除中间生成的time_delta列 df.drop('time_delta', axis=1, inplace=True)
这里df['Date'].dt.floor('D')会把Date的时间部分清零(变成2018-04-10 00:00:00),再加上转成timedelta的时间,就能精准得到合并后的datetime了。
两种方法最终都会生成你想要的New Column,类型为datetime64[ns],完全符合示例里的效果~
内容的提问来源于stack exchange,提问作者juanchit
相关产品推荐
相关产品推荐

