如何使用正则表达式筛选基于列条目的行?

时间:2018-05-18 15:21:19

标签: python regex pandas

以下是我正在使用的数据框的示意图(请注意,这是代表性示例,并不意味着演示任何列中的所有可能条目):

Name | Screen | Placeholder for other columns

Bill | GHRF (OOC) | text

Bob | GHRF (IC) | text

Sue | IRMS/CIR (OOC) | text

John | GHRF ISOFORMS IRMS CIR (OOC) | text

我正在尝试选择Screen列中包含(OOC)的所有行。

通常情况下,我会使用类似dfnew = df[df['Column'] == 'Criteria']的内容过滤数据框,但这不适用于正则表达式。

我也尝试了dfnew = df[df['Screen'].filter(regex = r'OOC', axis = 0)],我认为它会起作用,但没有。

有人可以向我解释如何使用正则表达式根据列条目选择行吗?

我想结束的是这样的事情:

Name | Screen | Placeholder

Bill | GHRF (OOC) | text

SUE | IRMS/CIR (OOC) | text

John | GHRF ISOFORMS IRMS CIR (OOC) | text

2 个答案:

答案 0 :(得分:4)

DataFrame.filter过滤列名称,而非值。您正在寻找str.contains

dfnew = df[df['Screen'].str.contains(r'\(OOC\)')]

或者,如果您不需要正则表达式,请将其关闭 -

dfnew = df[df['Screen'].str.contains(r'(OOC)', regex=False)]

print(dfnew)
   Name                        Screen
0  Bill                    GHRF (OOC)
2   Sue                IRMS/CIR (OOC)
3  John  GHRF ISOFORMS IRMS CIR (OOC)

如果您计划在dfnew上进行更多索引编制/作业,我建议您使用

进行创建
dfnew = df[df['Screen'].str.contains(r'\(OOC\)')].copy()

以后要避免SettingWithCopyWarning

答案 1 :(得分:2)

我们可以尝试str.extract

df[df.Screen.str.extract('\((.*?)\)',expand=True)[0]=='OOC']