我有一个csv文件“trainning_data.csv”包含7列数据,但我只读了最后一列 csv文件的格式如下:
A B C D E F Last
1 1.5 14.2 21.5 50.1 25.5 14.2 25.2
2 ... ... ... ... ... ... ...
3
.
.
.
我使用pandas读取数据文件然后对其进行了可视化:
import pandas as pd
df = pd.read_csv('trainning_data.csv')
saved_column = df['Last']
plt.plot(saved_column, 'o')
plt.show()
然后我删除了oulier:
Q1 = np.percentile(saved_column, 25)
Q3 = np.percentile(saved_column, 75)
range=[Q1-1.5*(Q3-Q1),Q3+1.5*(Q3-Q1)];
id_max = np.where(saved_column>range[1])
id_min = np.where(saved_column<range[0])
position = np.concatenate( (id_max, id_min), axis=1)
saved_column = np.array(saved_column, dtype = 'double')
new_column = np.delete(saved_column, position.T)
len(new_column)
plt.plot(new_column, 'o')
plt.xlim(0, 1000)
plt.ylim(0,500)
plt.show()
删除所有异常值后,我想重建数据集,我试过:
fileHeader = ["Last"]
myFile = open('Training_Data_New.csv', 'w')
writer = csv.writer(myFile)
writer.writerow(fileHeader)
writer.writerows(new_column)
但是它给我一个错误:迭代预期,而不是numpy.float64
另一个问题是我需要删除与我发现的异常值位置相关的所有数据。我该如何解决这个问题?
答案 0 :(得分:0)
您可以通过numopy数组创建DataFrame
并按to_csv
写入文件:
pd.DataFrame({'Last':new_column}).to_csv('Training_Data_New.csv', index=False)
Pandas解决方案,用于删除异常值:
我认为您可以使用quantile
并使用between
按boolean indexing
进行过滤,最后将DataFrame
写入文件使用to_csv
:
df = pd.DataFrame({'Last':[1,2,3,5,8,10,45,100], 'A': np.arange(8)})
print (df)
A Last
0 0 1
1 1 2
2 2 3
3 3 5
4 4 8
5 5 10
6 6 45
7 7 100
Q1 = df['Last'].quantile(.25)
Q3 = df['Last'].quantile(.75)
q1 = Q1-1.5*(Q3-Q1)
q3 = Q3+1.5*(Q3-Q1)
df1 = df[df['Last'].between(q1, q3)]
print (df1)
A Last
0 0 1
1 1 2
2 2 3
3 3 5
4 4 8
5 5 10
plt.plot(df1['Last'].values, 'o')
plt.xlim(0, 1000)
plt.ylim(0,500)
plt.show()
#if want write only Last column
df1[['Last']].to_csv('Training_Data_New.csv', index=False)
#if you want write all columns
df1.to_csv('Training_Data_New.csv', index=False)
答案 1 :(得分:0)
您可以在add
中column
将新列变量作为existing_column
,然后使用pd.to_csv()进行保存。
get new_column
变量后
从df。
删除列 df.drop('last',axis=1, inplace=True)
2
df['last'] = new_column
保存你的df。
df.to_csv('Training_Data_New.csv',index=False)