我有一个如下数据框
name genre satya |ACTION|DRAMA|IC| satya |COMEDY|BIOPIC|SOCIAL| abc |CLASSICAL| xyz |ROMANCE|ACTION|DARMA| def |DISCOVERY|SPORT|COMEDY|IC| ghj |IC|
现在,我想查询数据帧,以便获得第1,5和6行。i:ei想找到| IC |。单独使用或与其他类型组合使用。
到现在为止,我可以使用
df[df['genre'] == '|ACTION|DRAMA|IC|'] ######exact value yields row 1
或包含搜索依据的字符串
df[df['genre'].str.contains('IC')] ####yields row 1,2,3,5,6 # as BIOPIC has IC in that same for CLASSICAL also
但是我不要这两个。
#df[df['genre'].str.contains('|IC|')] #### row 6 # This also not satisfying my need as i am missing rows 1 and 5
因此,我的要求是找到具有| IC |的类型 (我的字符串搜索失败,因为python将’|’视为or运算符)
有人建议使用某些reg或任何方法来实现这一点。感谢ADv。
我认为您可以添加\到正则表达式中进行转义,因为|没有 \被解释为OR:
\
|
OR
’|’ A | B,其中A和B可以是任意RE,它创建一个匹配A或B的正则表达式。任意数量的RE都可以由’|’分隔 通过这种方式。也可以在组内使用(请参阅下文)。扫描目标字符串时,RE用“ |”分隔 从左到右尝试。当一个模式完全匹配时,该分支被接受。这意味着,一旦A匹配,即使将产生更长的整体匹配,也不会对其进行进一步测试。换句话说,“ |” 操作员从不贪婪。要匹配文字“ |”,请使用\ |,或将其括在字符类中,如[|]所示。
’|’
A | B,其中A和B可以是任意RE,它创建一个匹配A或B的正则表达式。任意数量的RE都可以由’|’分隔 通过这种方式。也可以在组内使用(请参阅下文)。扫描目标字符串时,RE用“ |”分隔 从左到右尝试。当一个模式完全匹配时,该分支被接受。这意味着,一旦A匹配,即使将产生更长的整体匹配,也不会对其进行进一步测试。换句话说,“ |” 操作员从不贪婪。要匹配文字“ |”,请使用\ |,或将其括在字符类中,如[|]所示。
print df['genre'].str.contains(u'\|IC\|') 0 True 1 False 2 False 3 False 4 True 5 True Name: genre, dtype: bool print df[df['genre'].str.contains(u'\|IC\|')] name genre 0 satya |ACTION|DRAMA|IC| 4 def |DISCOVERY|SPORT|COMEDY|IC| 5 ghj |IC|