如何使用regex筛选基于列条目的行?

2024-06-16 13:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我正在使用的数据帧的示意图(注意,这是一个代表性示例,并不打算演示任何列中所有可能的条目):

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)],我认为这是可行的,但没有

有人能告诉我如何使用regex根据列条目选择行吗

最后我想说的是:

Name | Screen | Placeholder

Bill | GHRF (OOC) | text

SUE | IRMS/CIR (OOC) | text

John | GHRF ISOFORMS IRMS CIR (OOC) | text

Tags: 数据textnamedf条目johnscreenplaceholder
2条回答

我们可以试试str.extract

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

DataFrame.filter筛选列名,而不是值。你在找str.contains

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

或者,如果你不需要regex,关掉它-

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

相关问题 更多 >