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

Posted

技术标签:

【中文标题】如何从包含特定列中特定字符串的熊猫数据框中删除行? [复制]【英文标题】:How to drop rows from pandas data frame that contains a particular string in a particular column? [duplicate] 【发布时间】:2015-04-25 03:20:51 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

虽然您写的内容正确且更具可读性,但更短的方法是:df[~df.C.str.contains("XYZ")] 当我这样做时,它工作得很好,但是它也没有显示任何值为 NaN 的行。有没有办法让那些回来,以便生成的数据框包含不包含所需字符串和 NaN 的行? 如果您想查看它是否包含可能包含 1000 种不同事物的大型列表中的任何内容,而不是“XYZ”,您将如何执行此操作。 我收到一个错误:TypeError: bad operand type for unary ~: 'float',关于这个问题有什么想法吗? 添加na=False解决的问题【参考方案2】:

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

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

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

【讨论】:

你会如何做相反的事情?我想检查列值是否包含任何字符串。伪:for string in list_of_strings, check if column contains it 去掉"~" df = df[df['your column'].isin(['list of strings'])] 如果我们不知道列怎么办? 如何从多列而不是一列中删除? 这对我有用,但我意识到“字符串列表”应该是您要删除的确切字符串【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

对代码稍作修改。 na=False 将跳过空值。否则你会得到一个错误TypeError: bad operand type for unary ~: float

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

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

【讨论】:

【参考方案5】:
new_df = df[df.C != 'XYZ']

参考:https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

这种语法更容易记住。谢谢【参考方案7】:

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

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

【讨论】:

以上是关于如何从包含特定列中特定字符串的熊猫数据框中删除行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果特定列中的值不是熊猫数据框中的整数,则删除行

如何根据条件表达式从熊猫数据框中删除行[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]

在python数据框中删除不包含列中特定字符串的多列的重复项

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

从熊猫数据框中的组内选择特定行