从列表中删除所有异常值,而不仅仅是Python中的一个

2024-06-16 10:19:11 发布

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

我尝试删除python列表中的异常值。但它只删除了第一个(190000),而没有删除第二个(20000)。有什么问题

import statistics
dataset = [25000, 30000, 52000, 28000, 150000, 190000, 200000]

def detect_outlier(data_1):
    threshold = 1
    mean_1 = statistics.mean(data_1)
    std_1 = statistics.stdev(data_1)
    #print(std_1)
    for y in data_1:
        z_score = (y - mean_1)/std_1
        print(z_score)
        if abs(z_score) > threshold:
            dataset.remove(y)
    return dataset  
dataset = detect_outlier(dataset)
print(dataset)

输出:

[25000, 30000, 52000, 28000, 150000, 200000]

Tags: import列表fordatathresholddefmeandataset
2条回答
import statistics

def detect_outlier(data_1):
    threshold = 1
    mean_1 = statistics.mean(data_1)
    std_1 = statistics.stdev(data_1)
    result_dataset = [y  for y in data_1 if abs((y - mean_1)/std_1)<=threshold ]

    return result_dataset
if __name__=="__main__":
    dataset = [25000, 30000, 52000, 28000, 150000, 190000, 200000]
    result_dataset = detect_outlier(dataset)
    print(result_dataset)

这是因为您试图在同一数据地址上进行操作。 dataset的地址等于data_1地址,当您从列表中删除一个元素时,它将根据Python的foreach结构传递下一个元素。在迭代过程中,不能对列表进行操作

很快,尝试这样调用该方法(它将数据集的元素作为新列表发送,而不发送数据集):

dataset = detect_outlier(dataset[:])

相关问题 更多 >