【问题标题】:outlier detection and replacing them in complete dataframe异常值检测并在完整数据框中替换它们
【发布时间】:2021-07-27 17:37:02
【问题描述】:
def outliers(column, creditCardData):

creditCardData[column].describe()


zscore = (creditCardData[column] -
creditCardData[column].mean())/creditCardData[column].std()
no_of_out = sum(zscore > 3)
print('No of outliers: ', no_of_out)

upper_f = creditCardData[column].mean() + 3*creditCardData[column].std()
lower_f = creditCardData[column].mean() - 3*creditCardData[column].std()

no_of_out_up = sum(creditCardData[column]>upper_f)
no_of_out_lo = sum(creditCardData[column]<lower_f)

print('Removing outliers____________')

creditCardData[column][creditCardData[column]>upper_f] = upper_f
creditCardData[column][creditCardData[column]<lower_f] = lower_f

no_of_out_up = sum(creditCardData[column]>upper)
no_of_out_lo = sum(creditCardData[column]<lower)

print('Null values: ', creditCardData[column].isnull().sum())


outliers('PURCHASES', creditCardData)




outliers('ONEOFF_PURCHASES',creditCardData)
No of outliers:  422
Removing outliers____________
Null values:  0
<ipython-input-137-83ef36d41cf4>:15: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

异常值没有被替换。谁可以帮我这个事?使用 z score 方法构建了一个用于检测特征中的异常值的函数,并尝试通过将异常值替换为上限来解决该问题。我无法实现此功能的输出。那么,你能帮我解决这个问题吗?对于 z 分数检测阈值,上限为 3,下限为 -3。建立在数据集 CreditCardData 帮助我或指导我解决我在这里面临的问题!

【问题讨论】:

  • 您能否提供一个数据示例,以及您的预期结果?
  • 构建了一个函数,用于使用 z score 方法检测特征中的异常值,并尝试通过将异常值替换为上限来解决问题。我无法实现此功能的输出。那么,你能帮我解决这个问题吗? z 分数检测阈值上限为 3,下限为 -3。
  • 这不能解决您使用 .loc 提供的输出
  • 没有解决什么问题?它应该对SettingWithCopyWarning 有所帮助。您需要发布您的代码、输出和预期输出。在您的情况下,out_indlow_ind 的值是多少?你甚至有异常值吗?请研究如何在 Stack Overflow 上提问,以便获得所需的帮助,包括 herehere
  • 输出已粘贴异常值('ONEOFF_PURCHASES',creditCardData) 异常值数:422 删除异常值____________空值:0

标签: python pandas function spyder detection


【解决方案1】:
def Outliers(col_name, creditCardData):

mean = creditCardData[col_name].mean()
std = creditCardData[col_name].std()

upper = mean + 3 * std
lower = mean - 3 * std

print('Upper bound: ', upper)
print('Lower bound: ', lower, '\n')

no_of_out_up = sum(creditCardData[col_name]>upper)
no_of_out_lo = sum(creditCardData[col_name]<lower)

print('No of outliers above upperbound: ', no_of_out_up)
print('No of outliers below lowerbound: ', no_of_out_lo, '\n')

print('Removing outliers____________\n')
creditCardData[col_name][creditCardData[col_name]>upper] = upper
creditCardData[col_name][creditCardData[col_name]<lower] = lower

no_of_out_up = sum(creditCardData[col_name]>upper)
no_of_out_lo = sum(creditCardData[col_name]<lower)

print('No of outliers above upperbound: ', no_of_out_up)
print('No of outliers below lowerbound: ', no_of_out_lo, '\n')

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2020-08-05
    • 2019-08-11
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多