我是 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 文件的操作。任何帮助深表感谢。