Удаление строк из файла csv

#python #csv

#python #csv

Вопрос:

Я новичок в python, и вот в чем проблема.

Существует файл csv с кучей атрибутов, таких как «id», «SalePrice», «LotArea» и т.д. Столбец с индексом 3 является первым числовым атрибутом, а столбец с индексом 0 — «id». Кроме того, есть 1460 строк.

Требование: удалите запись, если ее числовые значения атрибутов являются выбросом.

Мой подход:

Шаг 1. Найдите Q1, Q2 и IQR

Шаг 2. Найдите идентификатор выбросов.

Шаг 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) amp; (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()
  

Я выполнил первые 2 шага. Список «outlier_id» содержит идентификатор выбросов. Я планировал использовать этот список для завершения шага 3.

Возникает проблема: в файле ‘new_train.csv’ ничего нет, в который я намеревался записать строки без выбросов.

Я не могу найти ошибку, поскольку я новичок в работе с файлами csv. Любая помощь очень ценится.

Комментарии:

1. добавьте отладочную печать после if(permission == True): . (Кстати — вы можете изменить его на if permission:

2. Часть шага 3 не может даже скомпилироваться: csv_writer определяется как обычный файловый объект, и вы пытаетесь использовать его как csv.writer . В любом случае, поскольку вы начали использовать pandas, придерживайтесь его. Просто сохраните соответствующие строки в своем фрейме данных и используйте их to_csv .

3. @SergeBallesta Итак, если csv_writer не работает, что я должен поместить?