处理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
相关产品推荐
相关产品推荐

