如何从数据帧中删除基于 IQR 过滤的单个值

how to delete single values based on IQR filtering from dataframe

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

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

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

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

您可以尝试类似的方法:

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

将所有异常值设置为 NA。