【问题标题】:remove outlier in dataframe of python删除python数据框中的异常值
【发布时间】:2021-03-24 20:57:48
【问题描述】:

希望使用 Python 中的均值和标准差去除 DataFrame 的异常值。但我想让它成为 na 而不是简单地删除异常值。然后我想以 Dataframe 的形式再次保存它。这是我的问题。

我想到了下面的代码,但我不知道在这里做更多的事情。我不在乎我是否能以任何方式解决我的问题,如果不是以下方式。

df_group = df.groupby('count')
df_group_mean = df_group.mean()
df_group_std = df_group.std()
index_list = df_group_mean.index
col_list = ["A", "B", "C", "D"]

for IndexList in index_list:
    temp = df.iloc[IndexList]
    
    for ColList in col_list:
        mean = df_group_mean.loc[IndexList, ColList]
        std = df_group_std.loc[IndexList, ColList]        
        temp[ColList] = np.where(temp[ColList] > mean + (std * sigma), np.nan, temp[ColList])
        temp[ColList] = np.where(temp[ColList] < mean - (std * sigma), np.nan, temp[ColList])

【问题讨论】:

  • 有小数据例子吗?
  • 我的回答对你有帮助吗?

标签: python outliers


【解决方案1】:

你可能需要这样的东西:

import pandas as pd
import numpy as np

df = pd.DataFrame({'x':[-30,-2,0,1,2,4,5,7,8,9,10,10,34]})

将超出或低于平均值 2 个标准差的值标记为异常值。在本例中,第一个和最后一个值将被转换为 NAN。

df[ (df['x'] > df['x'].mean()+2*df['x'].std()) | (df['x'] < df['x'].mean()-2*df['x'].std()) ] = np.nan

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2018-03-23
    • 2023-03-11
    • 2021-11-16
    相关资源
    最近更新 更多