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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:07