Pandas:用NaN替换数据帧中所有数值列中的异常值(3西格玛)

2024-10-06 09:01:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含数字和字符串列的数据框。在

import numpy as np 
import pandas as pd 
from scipy.stats import zscore

data = {'c1' : [1., 2., 3., 4.], 'c2' : [4., 3., 2., 1.], 'c3' : [5., 6., 7000., 8.], 
        'c4' : [8., 7., 6., 10000.], 'c5' : ['a', 'b', 'c', 'd']}

我想用NaN替换数值列中的异常值。在

^{pr2}$

这个代码可以做我想做的。在

df = pd.DataFrame(data) 
allcol = list(df) 
numcol = [x for x in allcol if x not in ('c5')] 
df[numcol] = df[numcol].mask(~df[numcol].apply(lambda x: zscore(x) < 1.5, axis=1)) 

不知道你是否知道更好更简单的解决方案。。。在


Tags: 数据字符串inimportnumpydfdataas
1条回答
网友
1楼 · 发布于 2024-10-06 09:01:49

可以在索引中设置“c5”,然后使用:

df1 = df.set_index('c5')
df1.where(df1.apply(zscore).lt(1.5)).reset_index().reindex_axis(df.columns,1)

输出:

^{pr2}$

相关问题 更多 >