Pandas中合并多列日期时间字段转换为纪元秒整数的方法
解决方案
最优实现(无需生成中间NewDate列)
你之前先单独转换日期列、再转字符串拼接的流程完全多余,pandas原生支持直接拼接两列字符串一次性解析为时间对象,性能远高于逐行lambda调用strptime,代码如下:
import pandas as pd # 示例数据初始化 df = pd.DataFrame({ 'Date': ['18 Jun 2022', '18 Jun 2022', '15 Jun 2022'], 'Time': ['10:22', '10:03', '21:34'] }) # 直接合并两列解析为时间,转epoch秒整数 df['epoch_seconds'] = ( pd.to_datetime(df['Date'] + ' ' + df['Time'], format='%d %b %Y %H:%M') .astype('int64') // 10**9 )
运行后输出结果:
Date Time epoch_seconds 0 18 Jun 2022 10:22 1655547720 1 18 Jun 2022 10:03 1655546580 2 15 Jun 2022 21:34 1655328840
- 格式符说明:
%d匹配两位日期、%b匹配三位月份缩写、%Y匹配四位年份、%H:%M匹配24小时制的小时和分钟 - 转换逻辑:pandas的datetime64类型默认存储epoch起算的纳秒级时间戳,整除10^9即可得到秒级整数值,无需额外时间计算。如果你的时间属于特定时区,可以在
to_datetime后调用.dt.tz_localize('你的时区')再做转换,避免时区偏差。
基于你现有中间表的修复方法
如果你已经生成了NewDate的DateTime列,不需要把datetime转回字符串再拼接,直接给日期加上Time列对应的时间差即可:
# 将Time列转为时间差类型 time_offset = pd.to_timedelta(df['Time'] + ':00') # 日期拼接时间后转epoch秒 df['epoch_seconds'] = (df['NewDate'] + time_offset).astype('int64') // 10**9
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

