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

处理DataFrame异常值时遇RuntimeWarning问题求助

问题:DataFrame异常值修正时出现RuntimeWarning

我的DataFrame中Net Entries和Net Exits列存在不合理的高值与负值,尝试用以下代码修正,但持续遇到**RuntimeWarning(空切片均值、无效标量运算)**问题。

indexes = [*D.index.unique()]
list_ = []

for index in indexes :
    
    df = D[D.index == index]
    
    array_ent = np.array(df['Net Entries'])
    array_ext = np.array(df['Net Exits'])
    
    avg_ent = np.mean(array_ent[(array_ent > 0) & (array_ent < 5040)])
    avg_ext = np.mean(array_ext[(array_ext > 0) & (array_ext < 5040)])
    
    array_ent[(array_ent < 0) | (array_ent > 5040)] = avg_ent
    array_ext[(array_ext < 0) | (array_ext > 5040)] = avg_ext
    
    df['x'] = array_ent
    df['y'] = array_ext
    
    list_.append(df)
    
MTA = pd.concat(list_, axis = 0)  

错误信息(翻译后)

RuntimeWarning: 空切片的均值。
return _methods._mean(a, axis=axis, dtype=dtype,

RuntimeWarning: 双精度标量运算中遇到无效值
ret = ret.dtype.type(ret / rcount)


错误原因

核心问题是部分分组的有效数据切片为空:当某个index分组里,Net Entries或Net Exits的所有值都不符合0 < 值 < 5040的条件时,np.mean()计算空数组的均值会返回nan,后续用nan赋值就会触发无效运算警告。


修正方案

通过判断有效数据长度、设置全局均值作为兜底值,避免空切片的均值计算问题:

# 先计算全局有效数据的均值,作为分组无有效数据时的兜底值
global_avg_ent = np.nanmean(D['Net Entries'][(D['Net Entries'] > 0) & (D['Net Entries'] < 5040)])
global_avg_ext = np.nanmean(D['Net Exits'][(D['Net Exits'] > 0) & (D['Net Exits'] < 5040)])

indexes = D.index.unique()
list_ = []

for index in indexes:
    df = D[D.index == index].copy()  # 加copy避免SettingWithCopyWarning
    
    array_ent = df['Net Entries'].values
    array_ext = df['Net Exits'].values
    
    # 筛选分组内的有效数据,空值则用全局均值填充
    valid_ent = array_ent[(array_ent > 0) & (array_ent < 5040)]
    avg_ent = np.nanmean(valid_ent) if len(valid_ent) > 0 else global_avg_ent
    
    valid_ext = array_ext[(array_ext > 0) & (array_ext < 5040)]
    avg_ext = np.nanmean(valid_ext) if len(valid_ext) > 0 else global_avg_ext
    
    # 替换异常值
    array_ent[(array_ent < 0) | (array_ent > 5040)] = avg_ent
    array_ext[(array_ext < 0) | (array_ext > 5040)] = avg_ext
    
    df['x'] = array_ent
    df['y'] = array_ext
    
    list_.append(df)

MTA = pd.concat(list_, axis=0)

优化说明

  • 用.copy()避免循环中修改原DataFrame的SettingWithCopyWarning
  • 提前计算全局有效均值,保证分组无有效数据时也有合法赋值
  • 显式判断有效数据长度,彻底规避空切片的均值计算警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:36