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

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

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

这可以用. drop ()方法有效地实现吗?

402629 次浏览

大熊猫已经向量化了字符串运算,所以你可以过滤掉那些包含你不想要的字符串的行:

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

如果您的字符串约束不仅仅是一个字符串,那么您可以使用以下命令删除相应的行:

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

以上操作将删除包含列表元素的所有行

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

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

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

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

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

下面的代码将给出所有行的列表:-

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

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

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

对代码稍作修改。使用 错误将跳过空值。否则您可能会得到一个错误 TypeError: unary ~ : float 的错误操作数类型

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

资料来源: TypeError: unary ~ : float 的错误操作数类型