【问题标题】:how to delete single values based on IQR filtering from dataframe如何从数据框中删除基于 IQR 过滤的单个值
【发布时间】:2021-03-22 10:04:32
【问题描述】:

我有一个大约 80 列和几百行的数据框,下面是一个示例数据框。我需要根据IQR 值过滤数据框,然后删除异常值而不是整行,只删除实际值/单元格。目前我可以定义Q1Q3IQR

我找到了一些解决方案,但它们删除了整行,但我只想删除异常值/单元格。

list1 = [-1200, 0.75, 85, 92, 115, 116, 227, 252, 271, 308, 314, 443, 509, 717, 793, 805, 891, 903, 1958, 2978]
list2 = [-903, 0.68, 90, 109, 129, 164, 351, 365, 440, 472, 538, 547, 591, 679, 682, 706, 776, 785, 787, 2886]
list3 = [-1123, 0.033, 73, 182, 296, 355, 438, 509, 528, 530, 567, 608, 613, 632, 653, 727, 745, 761, 780, 1985]
list4 = [-1328, 0.363, 89, 106, 131, 165, 171, 202, 335, 339, 379, 399, 425, 488, 513, 657, 728, 761, 840, 1844]

df = pd.DataFrame ({'A' : list1, 'B' : list2, 'C' : list3, 'D' : list4})
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

所以输出数据框应该是这样的:

【问题讨论】:

  • 建议的解决方案对您有用吗?
  • 抱歉回复晚了。谢谢你的回答。我在尝试实施您的提议时收到一条错误消息:AttributeError: module 'pandas' has no attribute 'NA'。所以它现在不起作用,但我根据你的建议得到了其他想法。再次感谢。
  • 该提案现在正在运行,并进行了一些修改。非常感谢你的想法。 df[(df Q3 + 1.5*IQR)] = np.nan
  • 你有旧版的熊猫吗? github.com/selik/xport/issues/37
  • 看来。 pd.__version__ Out[3]: '0.25.3' 感谢您引起我的注意。

标签: python pandas dataframe filter iqr


【解决方案1】:

你可以试试这样的:

df[(df < Q1 - 1.5*IQR) | (df>Q3 + 1.5*IQR)] = pd.NA      

将所有异常值设置为 NA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 2021-10-19
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2020-03-11
    相关资源
    最近更新 更多