Python,Pandas删除指定列中具有特定值的行

时间:2017-09-22 08:55:47

标签: python excel pandas dataframe

Excel电子表格如下所示。

this question

使用Pandas,我想删除“Project C”和“Project E”列以及“Project A”和“Project D”列中值为“XX”的所有行。

import pandas as pd
import numpy as np

work_file = "C:\\test.xlsx"

df = pd.read_excel(work_file, sheetname = "Sheet1", index_col = 0)

column_list_to_remove = [“Project C", “Project E"]

results1 = df.drop(column_list_to_remove, axis=1)

writer = pd.ExcelWriter("C:\\test new.xlsx")

pd.formats.format.header_style = None

results1.to_excel(writer,'Sheet1')

writer.save()

以上工作很好地删除了列。

我尝试在此行添加以删除“项目A”中值为“XX”的行,但失败了。没有希望删除“D计划”中的那些。

results1 = results1[results1."Project A" != "XX"]
# SyntaxError: invalid syntax

如何删除这些行?谢谢。

1 个答案:

答案 0 :(得分:1)

如果你的列名没有空格,你可以按照以下方式做一些事情:

results1 = results1.query("ColumnName != 'XX'")

或者替代地:

results1.query("ColumnName != 'XX'", inplace=True)
唉,他们这样做了。现在你可以重命名这些列,因为空白是邪恶的化身,或者执行:

results1 = results1[results1['Project A'] != 'XX']

基本上:为索引创建一个掩码并对数据帧进行切片。

在没有空格的情况下重命名列也可以在oneliner中完成:

results1.columns = [''.join(x.strip().split()) for x in results1.columns]

然后你可以继续这样的事情:

column_list = ['ProjectA', 'ProjectD']
for col in column_list:
    results1.query(col+"!='XX'", inplace=True)