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

使用pandas .dt.round时报AttributeError:仅可对类日期时间值使用.dt访问器

问题描述

在将时间戳按30分钟步长取整时,触发错误:AttributeError: Can only use .dt accessor with datetimelike values。同一格式的另一个数据帧处理正常,当前代码及处理后的DataFrame如下:

运行代码

for hobo in loggers_hobo:
    
    df = pd.read_csv(path_input+hobo+ext, skiprows=[0])
    df.rename(columns={'Date Time, GMT+01:00': 'TIMESTAMP', 'Abs Pres, psi (LGR S/N: '+hobo+', SEN S/N: '+hobo+')': 'Pressure_TOT_'+hobo, 'Temp, °F (LGR S/N: '+hobo+', SEN S/N: '+hobo+')': 'Temperature'}, inplace=True)
    df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP']).dt.strftime('%Y-%m-%d %H:%M:%S')
    df['TIMESTAMP'] = df['TIMESTAMP'].dt.round('30min') 
    df.drop(['#', 'Coupler Detached (LGR S/N: '+hobo+')', 'Coupler Attached (LGR S/N: '+hobo+')', 'Host Connected (LGR S/N: '+hobo+')', 'End Of File (LGR S/N: '+hobo+')'], inplace=True, axis=1)
    df.to_csv(path_temp+hobo+ext)
    print(df)

处理后的DataFrame片段

TIMESTAMP  Pressure_TOT_20796630  Temperature
0      2022-03-11 14:10:00                14.8332       75.659
1      2022-03-11 14:10:22                    NaN          NaN
2      2022-03-11 14:18:58                    NaN          NaN
3      2022-03-11 14:19:54                    NaN          NaN
4      2022-03-11 14:20:58                    NaN          NaN
                   ...                    ...          ...
16094  2023-02-09 12:40:00                16.5452       42.363
16095  2023-02-09 13:10:00                16.5363       42.179
16096  2023-02-09 13:20:36                    NaN          NaN
16097  2023-02-09 13:20:43                    NaN          NaN
16098  2023-02-09 13:20:58                    NaN          NaN
解决思路
  • 错误原因:pd.to_datetime()将字符串转为datetime类型后,立刻用dt.strftime()把它转回了字符串格式。字符串类型没有dt访问器,所以后续调用dt.round()会报错。另一个数据帧能正常处理,大概率是因为它没有执行dt.strftime()这一步,或者后续没有对字符串类型的时间戳调用dt方法。

  • 修正方案:

    1. 先完成时间取整操作,再转成字符串格式(如果业务需要显式的字符串格式):
      # 先转为datetime类型并完成取整
      df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP']).dt.round('30min')
      # 按需转成指定字符串格式
      df['TIMESTAMP'] = df['TIMESTAMP'].dt.strftime('%Y-%m-%d %H:%M:%S')
      
    2. 如果不需要显式的字符串格式,可以直接保留datetime类型处理,pandas在保存CSV时会自动将datetime类型转为标准字符串格式,不影响后续使用:
      df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP']).dt.round('30min')
      

替换原代码中错误的两行即可解决问题。


内容的提问来源于stack exchange,提问作者Tobias Bowley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:50:17