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

Python 如何从数据帧中删除基于IQR过滤的单个值,python,pandas,dataframe,filter,iqr,Python,Pandas,Dataframe,Filter,Iqr,我有一个大约有80列和几百行的数据框,下面是一个示例数据框。我需要根据IQR值过滤数据帧,然后删除异常值,但不删除整行,只删除实际值/单元格。就我所能定义的Q1、Q3和IQR 我找到了一些解决方案,但它们删除了整行,但我只想删除异常值/单元格 list1=[-1200、0.75、85、92、115、116、227、252、271、308、314、443、509、717、793、805、891、903、1958、2978] 列表2=[-903,0.68,90,109,129,164,351,365

我有一个大约有80列和几百行的数据框,下面是一个示例数据框。我需要根据
IQR
值过滤数据帧,然后删除异常值,但不删除整行,只删除实际值/单元格。就我所能定义的
Q1
Q3
IQR

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

list1=[-1200、0.75、85、92、115、116、227、252、271、308、314、443、509、717、793、805、891、903、1958、2978]
列表2=[-903,0.68,90,109,129,164,351,365,440,472,538,547,591,679,682,706,776,785,787,2886]
清单3=[-1123,0.033,73,182,296,355,438,509,528,530,567,608,613,632,653,727,745,761,780,1985]
清单4=[-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分位数(0.25)
Q3=分位数(0.75)
IQR=Q3-Q1
因此,输出数据帧应如下所示:


您可以尝试以下方法:

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

将所有异常值设置为NA。

建议的解决方案对您有效吗?很抱歉,回复太晚。谢谢你的回答。我在尝试实施您的建议时收到一条错误消息:AttributeError:模块“pandas”没有属性“NA”。所以它现在不起作用了,但我根据你的建议有其他想法。所以再次感谢。这个提议现在正在运作中,只是做了一些修改。非常感谢你的想法。df[(dfQ3+1.5*IQR)]=np.n你有熊猫的旧版本吗。似乎是这样。pd.\uuuu version\uuuuu Out[3]:“0.25.3”感谢您提醒我注意。