下面是我正在使用的数据框的示意图(注意,这是一个代表性示例,并不是要演示任何列中的所有可能条目):
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
我试图在屏幕列中选择所有具有(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
解决方法
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.