我有一个非空数据帧df,它有大约100列。我想从每一列中删除离群值,为此,我将进行以下操作。
df1 = df[np.abs(df - df.mean()) <= (3*df.std())]
我希望df1包含的记录数少于df,但是使用上述方法,形状保持不变。此外,它还创建了一组空值。
我的理解是,它消除了异常值,但是现在我有了零值。我的理解正确吗?
答案 0 :(得分:0)
您的理解是正确的。它正在删除异常值,并用NaN代替它们:
np.random.seed(0)
df = pd.DataFrame(np.random.normal(0,1,(100,10)))
idx = np.abs(df - df.mean()) <= (3*df.std())
outlier_locations = np.where(idx == False)
df1 = df[idx]
print(outlier_locations)
(array([58]), array([9]))
如果您希望df1包含的记录少于df,那么您可能想删除包含异常值的行或列,或者只是删除行中的条目,以便保留参差不齐的数组。