如何解决提取DataFrame时间列分钟数时的AttributeError错误?
解决Timedelta列提取分钟数的AttributeError问题
这个报错很典型,我来帮你理清楚问题所在和解决办法:
问题根源
你的time列是Timedelta(时间差)类型(从dtype('<m8[ns]')能直接看出来),而不是我们常用的Datetime(日期时间)类型。这两种类型的dt属性提供的方法/属性有明显区别:
- Datetime类型的
dt对象(DatetimeProperties)有minute(单数)属性,用来提取具体时刻的分钟数 - Timedelta类型的
dt对象(TimedeltaProperties)只有minutes(复数)属性,用来提取时间差的总分钟数
你误用了单数形式的minute,自然会触发AttributeError。
解决方案分两种情况:
情况1:你确实需要提取Timedelta的总分钟数
直接把minute改成复数minutes即可:
df['minute'] = df.time.dt.minutes
比如00:30:45这个Timedelta,会返回30(取总分钟数的整数部分)。
情况2:你的time列其实是一天内的时刻(不是时间差)
如果00:30:45代表的是当天的某个时间点,而不是和某个起点的时间差,那你应该先把它转换为Datetime类型。推荐结合你的date列生成完整的日期时间:
# 合并date和time列成完整的Datetime df['full_datetime'] = pd.to_datetime(df['date']) + df['time'] # 提取分钟数 df['minute'] = df.full_datetime.dt.minute
如果只是单独处理time列,也可以把它加到一个任意基准日期上转换:
df['datetime_time'] = pd.to_datetime('1970-01-01') + df['time'] df['minute'] = df.datetime_time.dt.minute
额外提醒
以后区分Timedelta和Datetime的dt属性时,可以记住这个小规律:
- Datetime的属性是单数(描述时刻的某个部分:
hour,minute,second) - Timedelta的属性是复数(描述时间差的总量:
hours,minutes,seconds)
内容的提问来源于stack exchange,提问作者Le Noff
相关产品推荐
相关产品推荐

