繁体   English   中英

从python pandas的dataframe列中搜索匹配的字符串模式

[英]searching matching string pattern from dataframe column in python pandas

我有一个如下数据框

 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或任何方法来完成此工作。

我认为您可以在正则表达式中添加\\以进行转义,因为| 不带\\的解释为OR

'|'

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|

可能是这样的构造:

    pd.DataFrame[DataFrame['columnName'].str.contains(re.compile('regex_pattern'))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM