熊猫放下多列的行

时间:2017-02-07 17:40:12

标签: python pandas

我请求你帮助使用两个过滤器使用Pandas从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日删除Reid,Mark和Connie。当我运行上面的drop column snippet时,新的csv返回NO数据,只返回列标题。如何解决这个问题,请帮助Pythoners。

3 个答案:

答案 0 :(得分:4)

您需要在3/8/2015附近加上引号并稍微更改逻辑以过滤掉所有不等于您正在过滤的条件的逻辑。你还需要围绕每个条件的括号。

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

答案 1 :(得分:2)

您使用的逻辑存在问题。你要说的是找到没有“Reid,Mark和Connie”的数据框情况 销售日期是2015年3月8日。哪一行都没有。你想要的是下面的内容:

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

答案 2 :(得分: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']