Python:读取csv文件,删除异常值然后重建csv文件

时间:2018-04-20 05:58:30

标签: python pandas csv

我有一个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

另一个问题是我需要删除与我发现的异常值位置相关的所有数据。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以通过numopy数组创建DataFrame并按to_csv写入文件:

pd.DataFrame({'Last':new_column}).to_csv('Training_Data_New.csv', index=False)

Pandas解决方案,用于删除异常值:

我认为您可以使用quantile并使用betweenboolean 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)

您可以在addcolumn将新列变量作为existing_column,然后使用pd.to_csv()进行保存。

get new_column变量后

  1. 从df。

    删除列
     df.drop('last',axis=1, inplace=True)
    
  2. 2

        df['last'] = new_column
    
    1. 保存你的df。

       df.to_csv('Training_Data_New.csv',index=False)