以下是我正在使用的数据框的示意图(请注意,这是代表性示例,并不意味着演示任何列中的所有可能条目):
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
答案 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']