【发布时间】:2020-06-16 17:41:02
【问题描述】:
pandas 中的这段代码不起作用。如果该列包含提供的任何文本/数字,我希望它删除该行目前,如果单元格与我的代码中传递的确切文本匹配,我只能让它工作。因为它只删除说 Fin* 的单元格不是金融或金融...
df2 = df[df.Team != 'Fin*']
【问题讨论】:
pandas 中的这段代码不起作用。如果该列包含提供的任何文本/数字,我希望它删除该行目前,如果单元格与我的代码中传递的确切文本匹配,我只能让它工作。因为它只删除说 Fin* 的单元格不是金融或金融...
df2 = df[df.Team != 'Fin*']
【问题讨论】:
您可以使用startswith
df[~df.Team.str.startswith('Fin')]
或者
df[~df.Team.str.contains('Fin')]
【讨论】:
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
【讨论】:
~df.C.str.contains("abc")
此操作需要正则表达式。这是一个合成数据框:
df = pd.DataFrame({'Team': ['Finance', 'Finally', 'Foo']})
这是一个没有 (~) 的数据框:
df[~df.Team.str.match('Fin*')]
# Team
#2 Foo
如果您确定感兴趣的字符串总是以 Fin 开头,则可以使用“更柔和”的方法:
df[~df.Team.str.startswith('Fin')]
# Team
#2 Foo
【讨论】:
* 被解释为regex。由于这不是您想要的,您可以通过 \
转义 *df2 = df[df.Team != 'Fin\*']
或者干脆使用
df2 = df[~dfTeam.str.contains('Fin')]
【讨论】: