Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:读取csv文件,删除异常值,然后重建csv文件_Python_Pandas_Csv - Fatal编程技术网

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

Python:读取csv文件,删除异常值,然后重建csv文件,python,pandas,csv,Python,Pandas,Csv,我有一个csv文件“training_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读取数据文件,然后将

我有一个csv文件“training_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()
然后我移除了欧利埃,如下所示:

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()
但它给了我一个错误:iterable是预期的,而不是numpy


另一个问题是,我还需要删除与我发现的异常值位置相关的所有数据。如何修复此问题?

您可以通过numopy数组创建
数据帧
,并通过以下方式写入文件:

删除异常值的最佳解决方案:

我认为您可以使用和过滤,最后写入
DataFrame
文件使用:



您可以
将新列变量添加为
现有列中的
,然后使用pd.to\u csv()保存

获取新列后
变量

  • 从df中删除最后一列

     df.drop('last',axis=1, inplace=True)
    
  • 二,

  • 保存您的df

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

  • 我试过了,没用。它给出了一个错误。ValueError:值的长度与indexThanks的长度不匹配。很多时候,我尝试了Dataframe,结果成功了。很高兴知道另一种删除异常值的方法。@TriềUHả不客气!如果我的答案有帮助,别忘了——点击答案旁边的复选标记,将其从灰色变为填充。谢谢
    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)
    
     df.drop('last',axis=1, inplace=True)
    
        df['last'] = new_column
    
     df.to_csv('Training_Data_New.csv',index=False)