#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 не работает, что я должен поместить?