Pandas重采样报错:TypeError: datetime.time无法执行+运算
问题分析与解决方法
错误原因
尽管你的DataFrame索引是datetime64[ns]类型,但DataFrame中存在datetime.time类型的列。resample('H').mean()会默认对所有列执行均值计算,而datetime.time类型不支持加法运算(均值计算依赖求和操作),因此触发TypeError。
解决方法
方法1:仅对数值列执行重采样
明确筛选出数值类型的列进行重采样,避开datetime.time列:
# 仅保留数值列后重采样计算均值 df_el_jan_mar_wkday.select_dtypes(include=['number']).resample('H').mean()
方法2:转换datetime.time列为可计算数值
如果需要保留时间列的信息,可先将其转换为秒数(或其他数值单位),计算均值后再转回时间格式:
import datetime # 假设目标时间列名为'time_column' # 将time类型转为秒数 df_el_jan_mar_wkday['time_column'] = df_el_jan_mar_wkday['time_column'].apply( lambda t: t.hour * 3600 + t.minute * 60 + t.second ) # 重采样计算均值 resampled_df = df_el_jan_mar_wkday.resample('H').mean() # 将秒数转回time类型 resampled_df['time_column'] = resampled_df['time_column'].apply( lambda s: datetime.time(seconds=int(s)) )
方法3:手动排除datetime.time列
直接过滤掉包含datetime.time类型的列后再重采样:
# 筛选非time类型的列 valid_cols = [ col for col in df_el_jan_mar_wkday.columns if not isinstance(df_el_jan_mar_wkday[col].iloc[0], datetime.time) ] # 重采样计算 df_el_jan_mar_wkday[valid_cols].resample('H').mean()
内容的提问来源于stack exchange,提问作者HOSSAM
相关产品推荐
相关产品推荐

