Python执行numpy操作后恢复列头报Series无y属性错误求助
问题原因分析
逐行梳理代码的错误逻辑链:
- 执行
Filtered_CV = np.clip(Filtered_CV['y'], .1, np.inf)时,你仅选中了y单列做数值截断,返回结果是一维Series结构,原始DataFrame里的yhat列直接被丢弃,此时Filtered_CV已经不是多列DataFrame - 后续调用
between_time返回的T_CV仍然是Series类型,Series没有columns属性,你执行T_CV.columns = ['ds','y']的赋值操作完全不生效 - 最后尝试用
T_CV.y访问列时,本质是在Series上调用不存在的属性,因此触发AttributeError - 你导出Excel能看到'y'列属于错觉:pandas导出Series时会自动把索引、值分别作为两列输出,不是说数据本身还是DataFrame结构
修复方案
修改数据处理逻辑,仅对y列做截断,保留完整DataFrame结构即可:
# Convert ds to datetime cv_results['ds'] = pd.to_datetime(cv_results['ds']) # Set ds as index Filtered_CV = cv_results.set_index('ds') # Drop NaNs Filtered_CV = Filtered_CV.dropna(subset=['y','yhat']) # 仅对y列做0值截断,保留yhat列和DataFrame结构 Filtered_CV['y'] = np.clip(Filtered_CV['y'], .1, np.inf) # Filter by Time(修正原代码的变量名笔误,原代码写的Filtered_CV1不存在) T_CV = Filtered_CV.between_time('05:00','16:00').reset_index() # 此时T_CV已经包含ds、y、yhat三列,无需额外赋值列名 # Calculate MAPE MAPE = mean_absolute_percentage_error(T_CV.y, T_CV.yhat)
注意事项
如果需要保留ds作为索引可以删掉reset_index(),直接用T_CV['y']、T_CV['yhat']访问对应列即可。
内容的提问来源于stack exchange,提问作者t25
相关产品推荐
相关产品推荐

