我是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) & (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文件操作,因此无法找到错误。非常感谢您的帮助。