将5分钟时间间隔合并为小时间隔时遇TypeError问题求助
解决方法
错误根源
你遇到的TypeError是因为vds2['Date']是datetime.date类型数组,vds2['Time']是datetime.time类型数组,这两种类型都无法直接和字符串' '做加法运算。要合并成可用于索引的datetime对象,需要先将它们转为字符串后再拼接,或者利用原始字段直接组合。
方案一:修复现有代码
将Date和Time列转为字符串后拼接,再转换为datetime索引:
# 转换为字符串后拼接,生成完整时间字符串 vds2.index = pd.to_datetime(vds2['Date'].astype(str) + ' ' + vds2['Time'].astype(str)) # 按小时重采样求和 vds2 = vds2.resample('H').agg({'Volume':'sum'})
方案二:简化流程(推荐)
跳过生成Date和Time中间列的步骤,直接利用原始的datestamp和timestamp字段组合成datetime索引,效率更高:
# 筛选2017年8月数据并重命名列 vds2 = vds2[(vds2['datestamp'].dt.year == 2017) & (vds2['datestamp'].dt.month == 8)] vds2 = vds2.rename(columns={'det_vol': 'Volume'}) # 直接合并日期和时间字段为datetime索引(无需生成中间列) # 如果timestamp是时间字符串(如"08:05:00"),可以用以下两种方式: # 方式1:字符串拼接 vds2.index = pd.to_datetime(vds2['datestamp'].astype(str) + ' ' + vds2['timestamp']) # 方式2:更高效的时间增量合并(推荐) vds2.index = vds2['datestamp'] + pd.to_timedelta(vds2['timestamp']) # 按小时重采样统计流量总和 vds2 = vds2.resample('H').agg({'Volume':'sum'})
补充说明
方案二中的pd.to_timedelta(vds2['timestamp'])可以直接将时间字符串转换为时间增量,和datestamp(datetime类型)相加得到完整的datetime对象,这种方式不需要字符串转换,性能更优。
内容的提问来源于stack exchange,提问作者Oscy
相关产品推荐
相关产品推荐

