0

我是 python 新手,这就是问题所在。

有一个 csv 文件,其中包含许多属性,例如“id”、“SalePrice”、“LotArea”等。索引为 3 的列是第一个数字属性,索引为 0 的列是“id”。此外,还有 1460 行。

要求:如果记录的数值属性值为异​​常值,则删除该记录。

我的做法:

步骤 1. 查找 Q1、Q2 和 IQR

步骤 2. 查找异常值的 id。

步骤 3. 删除有异常值的行。

    #Step 1
        index = 0
        outlier_id = []
        data = pd.read_csv('train.csv')
        Q1 = data[list(data.columns)[3]].quantile(0.25)
        Q3 = data[list(data.columns)[3]].quantile(0.75)
        IQR = Q3 - Q1
    
    #Step 2
        filter = ((data[list(data.columns)[3]] >= Q1 - 1.5 * IQR) & (data[list(data.columns)[3]] <= Q3 + 1.5 * IQR))
        while(index < 1460):
            if(filter[index] == False):
                outlier_id.append(data[list(data.columns)[0]][index])      #store id of outliers in array
    
            index = index + 1
        print(outlier_id)
    
    #Step 3
        permission = True
        csv_writer =  open('new_train.csv', 'w')

    
        for line in csv_reader:
            index = 0
            while(index < len(outlier_id)):
                if line[0] == outlier_id[index]:
                    permission = False
                index = index + 1
            if(permission == True):
                csv_writer.writerow(line)
        csv_writer.close()

我已经完成了前两个步骤。列表“outlier_id”包含异常值的 id。我计划使用此列表来完成第 3 步。

问题来了:文件'new_train.csv'中没有任何内容,我打算写没有异常值的行。

我找不到错误,因为我不熟悉 csv 文件的操作。任何帮助深表感谢。

4

0 回答 0