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

无NaN却出现“Mean of empty slice”警告的原因及解决办法

问题原因

你这段代码的警告核心是布尔索引的对齐错误:
你用的keptdata.price != 0是针对整个原DataFrame的布尔筛选条件,但前面的keptdata.iloc[i-500:i].price只是原数据的一个子切片。当用全局的布尔序列去筛选子切片的列时,两者的索引范围不匹配,会导致筛选后可能出现空的数值序列——np.average遇到空序列就会抛出RuntimeWarning: Mean of empty slice的警告,哪怕你确认了原数据无NaN也没用。

解决办法

除了抑制警告,有几个更合理的修正方式:

  • 修正布尔索引的范围:把非零判断限定在当前截取的子切片里,确保筛选条件和目标列的索引完全匹配:

    avg = np.average(keptdata.iloc[i-500:i].price[keptdata.iloc[i-500:i].price != 0])
    

    这样只会筛选子切片里的非零price,不会出现索引错位导致的空序列(如果子切片里全是0,那你可以根据业务逻辑加个兜底判断,比如设avg为0或者前一次的平均值)。

  • 改用Pandas的mean方法替代np.average:Pandas的mean()方法遇到空序列时会返回NaN,不会抛出警告,之后你可以根据需求处理NaN值:

    subset_price = keptdata.iloc[i-500:i].price[keptdata.iloc[i-500:i].price != 0]
    avg = subset_price.mean() if not subset_price.empty else 0  # 这里的0可以换成你需要的默认值
    
  • 提前生成子切片再操作:先截取子DataFrame,再统一处理,代码可读性更高:

    subset = keptdata.iloc[i-500:i]
    non_zero_prices = subset[subset.price != 0]['price']
    avg = np.average(non_zero_prices) if not non_zero_prices.empty else 0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:12:13