2017-02-07 90 views
3

我请求你的协助,使用两个过滤器使用熊猫从csv拖放一行。熊猫有多列拖放行

import pandas as pd 

moving = pd.read_csv('C:/Users/Salesdata.csv') 
df = pd.DataFrame(moving) 

df = df[df['Last Name, First Name'] != 'Reid, Mark and Connie' & df['Actual Sale Date'] == 3/8/2015] 

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

我的数据:

Last Name, First Name      Actual Sale Date 
Bugs, Rabbit and Bunny       12/11/2015 
Reid, Mark and Connie       3/8/2015 
Cortese, Robert and Laura      10/15/2014 
Reid, Mark and Connie       2/28/2015 

我需要删除的里德,马克和康妮与2015年3月8日。当我运行上面的drop column snippet时,新的csv返回NO数据,仅返回列标题。如何解决这个问题,请帮助Pythoners。

+0

你想只做大熊猫吗? –

回答

4

你需要把引号3/8/2015并更改逻辑有点过滤掉所有那些不等于你正在过滤的情况。你还需要在每个条件周围使用括号。

df[~((df['Last Name, First Name'] == 'Reid, Mark and Connie') & 
    (df['Actual Sale Date'] == '3/8/2015'))] 
+0

谢谢,但里德先生仍然出现了两次。 –

+0

我做了一个小小的编辑。你想返回3行是否正确? –

+0

是的3/8/2015可以摆脱Reid。 –

2

您正在使用的逻辑存在问题。您正在说要查找没有“Reid,Mark和Connie”的数据框情况,以及销售日期为3/8/2015的情况。这不是行。你想要的是如下因素:

df = df[~((df['Last Name, First Name'] == 'Reid, Mark and Connie') and (df['Actual Sale Date'] == 3/8/2015))] 
+0

谢谢,但在这种情况下,并不会工作,人们将不得不使用&否则它会抛出一个模棱两可的错误。我用&编辑它,它仍然显示所有四行数据。 –

2

在我的答案我不会使用pandas。我会做手工,我以为你的输入文件被称为input_file

data = (k.rstrip().split() for k in open("input_file", 'r')) 
final = [k for k in data if k[-1] != '3/8/2015'] 

for k in final: 
    print(k) 

输出:

['Last', 'Name,', 'First', 'Name', 'Actual', 'Sale', 'Date'] 
['Bugs,', 'Rabbit', 'and', 'Bunny', '12/11/2015'] 
['Cortese,', 'Robert', 'and', 'Laura', '10/15/2014'] 
['Reid,', 'Mark', 'and', 'Connie', '2/28/2015']