You need to enable JavaScript to run this app. 如何批量实例化Pandas DataFrame多列提升时间特征提取效率
优惠活动
大模型
产品
解决方案
定价
更多

如何批量实例化Pandas DataFrame多列提升时间特征提取效率

最优向量化实现方案(性能远高于遍历5次的版本,耗时远低于原版本1/5)

Pandas 的 DatetimeIndex 本身内置了所有时间属性的向量化访问接口,完全不需要在Python层做遍历操作,所有计算都在C层执行,性能远高于手动循环:

# 先确认索引是DatetimeIndex类型,非时间索引先执行下行转换
# df.index = pd.to_datetime(df.index)

df['MONTH'] = df.index.month
# pandas 1.1.0+ 版本废弃了index.week,统一使用isocalendar().week避免警告
df['WEEK'] = df.index.isocalendar().week
df['DAY'] = df.index.day
df['HOUR'] = df.index.hour
df['MINUTE'] = df.index.minute

你也可以用assign方法一次性完成所有新列的赋值,写法更简洁:

df = df.assign(
    MONTH = df.index.month,
    WEEK = df.index.isocalendar().week,
    DAY = df.index.day,
    HOUR = df.index.hour,
    MINUTE = df.index.minute
)

符合你要求的单次遍历实现方案

如果你确实需要仅做一次Python层遍历再批量赋值,可以用以下写法,遍历一次索引生成所有时间特征后一次性赋值给多列:

df[['MONTH', 'WEEK', 'DAY', 'HOUR', 'MINUTE']] = [
    (x.month, x.isocalendar().week, x.day, x.hour, x.minute)
    for x in df.index
]

性能说明

原写法的性能瓶颈不仅是5次遍历,更在于每次循环中df.index[i]的随机访问开销,上面两种方案的性能都远高于原写法:

  • 向量化方案性能通常是原写法的几十到上百倍,没有Python层遍历开销
  • 单次遍历方案性能是原写法的5~10倍,仅做一次全量索引遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:15:02