Pandas:如果单元格包含特定文本,则删除行

000*_*004 12 python pandas

熊猫中的这段代码不起作用。如果该列包含提供的任何文本/数字,我希望它删除该行目前我只能在单元格与我的代码中传递的确切文本匹配时才能让它工作..因为它只删除说 Fin* 的单元格不是财务或最终...

df2 = df[df.Team != 'Fin*']
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 16

您可以使用 startswith

df[~df.Team.str.startswith('Fin')]
Run Code Online (Sandbox Code Playgroud)

或者

df[~df.Team.str.contains('Fin')]
Run Code Online (Sandbox Code Playgroud)


min*_*bro 10

import pandas as pd
df = pd.DataFrame(dict(A=[1,2,3,4], C=["abc","def","abcdef", "lmn"]))

df:

    A   C
0   1   abc
1   2   def
2   3   abcdef
3   4   lmn

df[df.C.str.contains("abc") == False]
Run Code Online (Sandbox Code Playgroud)

或者按照@RafaelC 的建议

df[~df.C.str.contains("abc")]
Run Code Online (Sandbox Code Playgroud)

输出:

    A   C
1   2   def
3   4   lmn
Run Code Online (Sandbox Code Playgroud)

  • `~df.C.str.contains("abc")` (2认同)

DYZ*_*DYZ 5

您需要正则表达式来执行此操作。这是一个合成数据框:

df = pd.DataFrame({'Team': ['Finance', 'Finally', 'Foo']})
Run Code Online (Sandbox Code Playgroud)

这是一个没有 ( ~) 任何 Fin 的数据框:

df[~df.Team.str.match('Fin*')]
#  Team
#2  Foo
Run Code Online (Sandbox Code Playgroud)

如果您确定感兴趣的字符串始终以 Fin 开头,则可以使用“更软”的方法:

df[~df.Team.str.startswith('Fin')]
#  Team
#2  Foo
Run Code Online (Sandbox Code Playgroud)