Pandas中合并日期与小时列生成datetime时间戳的高效方法咨询
Pandas合并日期、小时列为datetime的高效实现方案
原有实现速度慢主要有两个原因:
apply+lambda属于Python层面的逐行遍历操作,数据量越大额外开销越高- 调用
pd.to_datetime时没有指定日期格式,自动推断格式也会增加不必要的耗时
最优方案(性能最高)
直接先将Date列转为datetime类型,再叠加对应小时的时间增量,全程为Pandas底层C实现的矢量化操作,无Python层面循环:
# 指定日期格式可以避免自动推断的耗时,格式按示例的日/月/年填写 df['datetime'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') + pd.to_timedelta(df['Hour'], unit='h') # 一次性删除多列,比多次调用drop效率更高 df = df.drop(['Date', 'Hour'], axis=1)
百万行级数据下,该方案速度比原有实现快100倍以上。
备选方案(字符串矢量化拼接)
如果习惯用字符串拼接的写法,也可以用Pandas的矢量化字符串操作替代逐行apply,性能同样远高于原有实现:
df['datetime'] = pd.to_datetime( df['Date'] + ' ' + df['Hour'].astype(str) + ':00:00', format='%d/%m/%Y %H:%M:%S' ) df = df.drop(['Date', 'Hour'], axis=1)
该方案性能略低于时间增量方案,但仍比原有apply写法快几十倍。
内容的提问来源于stack exchange,提问作者GalacticPonderer
相关产品推荐
相关产品推荐

