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

时间:2018-07-05 00:58:58

标签: python pandas

此代码在pandas中不起作用。如果列包含所提供的任何文本/数字,我希望它删除该行。目前,只有当单元格与我的代码中传递的确切文本匹配时,我才能使其工作..因为它仅删除说Fin *的单元格不是财务还是没有...

df2 = df[df.Team != 'Fin*']

4 个答案:

答案 0 :(得分:2)

您可以使用startswith

df[~df.Team.str.startswith('Fin')]

df[~df.Team.str.contains('Fin')]

答案 1 :(得分:1)

*被解释为regex。因为这不是您想要的,所以可以通过\

df2 = df[df.Team != 'Fin\*']

或者简单地使用

df2 = df[~dfTeam.str.contains('Fin')]

答案 2 :(得分:0)

此操作需要正则表达式。这是一个综合数据框:

df = pd.DataFrame({'Team': ['Finance', 'Finally', 'Foo']})

这里的数据框没有(~)具有任何Fin:

df[~df.Team.str.match('Fin*')]
#  Team
#2  Foo

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

df[~df.Team.str.startswith('Fin')]
#  Team
#2  Foo

答案 3 :(得分:0)

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]

或@RafaelC建议

df[~df.C.str.contains("abc")]

输出:

    A   C
1   2   def
3   4   lmn