2017-10-17 78 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