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

如何在Pandas中用年、日、时、分列创建Datetime对象?

在Pandas中用Year、Day、Hour、Minute创建datetime对象的最优方案

你遇到的问题核心是Pandas的pd.to_datetime必须要有完整的年、月、日信息,你的数据缺了Month列,所以之前的两种方法都失败了:

  • 第一种传month=None不行,因为这个参数不接受空值,必须是1-12的整数;
  • 第二种直接传入Year、Day等列,因为缺Month,pd.to_datetime无法解析,自然报错。

下面分两种场景给你最优解决方案:

场景1:Day是「当月的天数」

这种情况必须先补充Month列(比如默认设为1月,或者根据业务逻辑填充实际月份),再创建datetime:

# 先补充Month列,示例设为1,根据你的数据实际情况调整
df['Month'] = 1

# 直接用多列创建datetime对象
df['DateTime'] = pd.to_datetime(df[['Year', 'Month', 'Day', 'Hour', 'Minute']])

如果需要转换成指定格式的字符串,再用strftime:

df['DateTime_str'] = df['DateTime'].dt.strftime('%d/%y %H:%M')

场景2:Day是「当年的天数(儒略日)」

如果你的Day是从每年1月1日开始算的累计天数(比如1月1日是Day=1,12月31日是Day=365/366),可以用dayofyear参数直接创建,不需要Month:

df['DateTime'] = pd.to_datetime(
    dict(
        year=df['Year'],
        dayofyear=df['Day'],
        hour=df['Hour'],
        minute=df['Minute']
    )
)

或者用时间增量的方式实现,效果一样:

# 先创建当年的第一天
df['DateTime'] = pd.to_datetime(df['Year'], format='%Y')
# 加上Day-1天的增量(因为Day=1就是第一天,不需要加)
df['DateTime'] += pd.to_timedelta(df['Day'] - 1, unit='D')
# 再加上小时和分钟的增量
df['DateTime'] += pd.to_timedelta(df['Hour'], unit='h') + pd.to_timedelta(df['Minute'], unit='m')

注意点

  • 尽量保留datetime类型(不要直接转字符串),这样后续可以方便做时间筛选、分组、计算等操作;
  • 如果不确定Day的定义,先确认数据文档或者业务逻辑,避免填错Month或者用错参数。

内容的提问来源于stack exchange,提问作者Sushil Khatri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:35:18