如何从包含特定列中特定字符串的pandas数据框中删除行?

时间:2015-02-23 17:43:01

标签: python pandas

我在python中有一个非常大的数据框,我想删除在特定列中有特定字符串的所有行。

例如,我想删除所有具有字符串" XYZ"的行。作为数据框C列中的子字符串。

可以使用.drop()方法以高效的方式实现吗?

7 个答案:

答案 0 :(得分:109)

pandas具有矢量化字符串操作,因此您只需过滤掉包含您不想要的字符串的行:

In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"]))

In [92]: df
Out[92]:
   A          C
0  5        foo
1  3        bar
2  5  fooXYZbar
3  6        bat

In [93]: df[~df.C.str.contains("XYZ")]
Out[93]:
   A    C
0  5  foo
1  3  bar
3  6  bat

答案 1 :(得分:57)

如果你的字符串约束不只是一个字符串,你可以删除那些相应的行:

df = df[~df['your column'].isin(['list of strings'])]

以上内容将删除包含列表元素的所有行

答案 2 :(得分:14)

只有在您想比较确切的字符串时才会有效。 如果要检查列字符串是否包含列表中的任何字符串,它将不起作用。

与列表进行比较的正确方法是:

searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]

答案 3 :(得分:7)

答案 4 :(得分:4)

对代码稍作修改。 na = False 将跳过空值。否则,您会收到错误 TypeError:一元〜:浮点操作数类型错误

df[~df.C.str.contains("XYZ", na=False)]

来源:TypeError: bad operand type for unary ~: float

答案 5 :(得分:0)

如果您不想删除所有NaN,请使用

df[~df.C.str.contains("XYZ") == True]

答案 6 :(得分:0)

下面的代码将为您提供所有行的列表:-

df[df['C'] != 'XYZ']

要将上述代码中的值存储到数据框中:-

newdf = df[df['C'] != 'XYZ']