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

Python中如何操作字典内的DataFrame并去除异常值?

解决字典中多DataFrame的3σ异常值去除问题

先梳理你代码里的几个关键错误:

  • 初始化字典时df002 = dict是错的,这是引用Python的dict类,不是创建空字典,应该写成df002 = {}
  • 循环范围range(1,41)覆盖不了42个DataFrame,硬编码数字容易出错,直接遍历字典的键更稳妥
  • 第一次尝试的代码里重复赋值Upper_Limit,把Lower_Limit的计算写错了
  • 第二次代码里np.mean(df[x])应该用df1[x],你引用了未定义的df,应该用当前循环的df1
  • 每个DataFrame只有两列且仅需基于第二列处理,没必要遍历所有lst_cont列,直接指定目标列即可,避免重复过滤数据

修正后的完整代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 初始化空字典,用于存储处理后的DataFrame
df002 = {}

# 遍历原始字典中的每个DataFrame,用items()同时获取键和对应的数据框
for df_key, raw_df in df001.items():
    # 获取第二列的列名(如果知道具体列名,直接写比如'value_col'更清晰)
    target_column = raw_df.columns[1]
    
    # 计算3σ上下限
    col_mean = np.mean(raw_df[target_column])
    col_std = np.std(raw_df[target_column])
    upper_bound = col_mean + 3 * col_std
    lower_bound = col_mean - 3 * col_std
    
    # 过滤异常值:保留在上下限之间的数据
    filtered_df = raw_df[(raw_df[target_column] < upper_bound) & (raw_df[target_column] > lower_bound)]
    # 将处理后的DataFrame存入新字典
    df002[df_key] = filtered_df
    
    # 绘制箱线图并保存,文件名加上字典键避免覆盖
    sns.boxplot(x=filtered_df[target_column])
    plt.title(f"Filtered Data - {df_key}")
    plt.savefig(f"boxplot_{df_key}_{target_column}.png")
    plt.close()

代码说明:

  • 用df001.items()遍历,不管你的字典键是连续数字还是其他类型,都能完整处理42个DataFrame
  • 直接定位第二列,避免不必要的列循环,提升效率
  • 文件名加入字典的键,解决了循环中多次保存覆盖文件的问题
  • 修正了所有变量引用错误,确保计算上下限时用的是当前DataFrame的列数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:48:25