2017-10-17 37 views
2

我目前有一項任務需要下載一個CSV主文件,刪除列A - B列< = 0,列C等於給定短語的任何行。我期待到建立一個程序,將:使用Pandas和Python過濾CSV文件程序

  • 導入CSV文件
  • 刪除所有行,其中列A - B列< = 0
  • 詢問輸入到C列篩選一個以上的短語
  • 導出CSV到一個新文件

到目前爲止,我已經確定,要做到這一點的最好辦法是用大熊貓據幀的功能,因爲我已經用它之前執行其他對CSV進行操作文件:

import pandas as pd 
 

 
file = read_csv("sourcefile.csv") 
 
file['NewColumn'] = file['A'] - file['B'] 
 
file = file[file.NewColumn > 0] 
 
columns = ['ColumnsIWantToRemove'] 
 
file.drop(columns, inplace=True, axis=1) 
 
phrases = input('What phrases are you filtering for? ') 
 
file = file[file.C = phrases] 
 
file.to_csv('export.csv')

我的問題是,如何過濾柱下多個短語?我希望程序採取一個或多個短語,並只顯示列C的值等於這些值之一的行。任何指導都會很棒。謝謝!!

回答

0

我只要求輸入用逗號分隔:

phrases = phrases.split(",") 
file = file[file.C.isin(phrases)] 
+0

我已經試過這一點,但它似乎並沒有被過濾和當我導出數據文件時,它會出現空白。有任何想法嗎? – dner

+0

@dner打印語句在這裏是你的朋友,你應該嘗試在拆分之前和之後打印短語,然後你可以看到你是否可以在repl中複製它(例如ipython)。 –

0

也許這可以幫助你:

import csv 

input = open(sourcefile.csv, 'rb') 
output = open(out_sourcefile, 'wb') 
writer = csv.writer(output) 
for row in csv.reader(input): 
    if (phrases you want C column not to be,and you can add here multiple phrases): 
     continue 
     writer.writerow(row) 
input.close() 
output.close() 
+0

這似乎不起作用,因爲我們有數百個我們不想保留的短語 – dner