如何在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
相关产品推荐
相关产品推荐

