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

Lon*_*guy 82 python pandas

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

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

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

Bri*_*ket 132

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
Run Code Online (Sandbox Code Playgroud)

  • 虽然你写的是正确的,更可读的,但更短的方法是:`df [~df.C.str.contains("XYZ")]` (31认同)
  • 我收到错误:`TypeError: bad operand type for unary ~: 'float'`,关于这个问题有什么想法吗? (5认同)
  • 如果您想查看它是否包含在可能有 1000 种不同内容的大列表中,而不是“XYZ”,您将如何执行此操作。 (2认同)
  • 通过添加`na=False`解决了这个问题 (2认同)

kso*_*all 73

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

df = df[~df['your column'].isin(['list of strings'])]
Run Code Online (Sandbox Code Playgroud)

上面将删除包含列表元素的所有行

  • 只需删除"〜"df = df [df ['your column'].isin(['strings of strings'])] (6认同)
  • 如果我们不知道该栏怎么办? (2认同)
  • 你会如何从多列而不是一列中删除? (2认同)
  • 这对我有用,但我意识到“字符串列表”应该是您要删除的确切字符串 (2认同)

Rup*_*ssl 20

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

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

searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
Run Code Online (Sandbox Code Playgroud)


小智 8

对代码稍作修改。有NA =假将跳过空值。否则,您将收到错误TypeError:一元〜的错误操作数类型〜:float

df[~df.C.str.contains("XYZ", na=False)]
Run Code Online (Sandbox Code Playgroud)

源:TypeError:一元〜的错误操作数类型:: float


ak3*_*191 7

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

df[df['C'] != 'XYZ']
Run Code Online (Sandbox Code Playgroud)

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

newdf = df[df['C'] != 'XYZ']
Run Code Online (Sandbox Code Playgroud)