首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python :奇怪的str.contains行为

python :奇怪的str.contains行为
EN

Stack Overflow用户
提问于 2016-01-28 08:01:41
回答 1查看 409关注 0票数 3

我有一个名为df = pd.read_csv('my.csv')的数据文件

代码语言:javascript
复制
    CUSTOMER_MAILID                       EVENT_GENRE       EVENT_LANGUAGE  
0   000.tushar@gmail.com                    |ROMANCE|          Hindi   
1   000.tushar@gmail.com                      |DRAMA|          TAMIL   
2        satya@gmail.com                    |ROMANCE|          Hindi   
3   000.tushar@gmail.com                      |DRAMA|          Hindi   
4          sat@gmail.com    |ACTION|ADVENTURE|SCI-FI|        English   
5   000.tushar@gmail.com    |ACTION|ADVENTURE|COMEDY|        English   
6       fdvklf@gmail.com                     |ACTION|          Hindi   
7        asdar@gmail.com                      |DRAMA|          Hindi   
8       dfvkme@gmail.com     |FANTASY|HORROR|ROMANCE|        English   
9   000.tushar@gmail.com  |ACTION|ADVENTURE|THRILLER|        English   
10        king@gmail.com                      |DRAMA|          Hindi   
11  000.tushar@gmail.com           |ROMANCE|THRILLER|        KANNADA   
12  000.tushar@gmail.com                      |DRAMA|          Hindi   
13  000.tushar@gmail.com     |ACTION|ADVENTURE|DRAMA|        English   
14      iamher@gmail.com     |ACTION|ADVENTURE|DRAMA|         TELUGU   
15  000.tushar@gmail.com               |BIOPIC|DRAMA|          Hindi   
16    0007ayan@gmail.com            |HORROR|THRILLER|          Hindi   
17    0007ayan@gmail.com     |ACTION|COMEDY|THRILLER|           ODIA   
18  000.tushar@gmail.com    |ACTION|ADVENTURE|SCI-FI|        English   
19    0007ayan@gmail.com                    |ROMANCE|          Hindi   

但当我查询时,我发现在某种意义上,str.contains没有返回预期的输出。

代码语言:javascript
复制
 d = df.query((df['EVENT_GENRE'].str.contains('|ROMANCE|')) & (df['EVENT_LANGUAGE'] == 'Hindi'))
 d
 Out[53]: 
     CUSTOMER_MAILID        EVENT_GENRE EVENT_LANGUAGE
 0   000.tushar@gmail.com          |ROMANCE|          Hindi
 2        satya@gmail.com          |ROMANCE|          Hindi
 3   000.tushar@gmail.com            |DRAMA|          Hindi
 6       fdvklf@gmail.com           |ACTION|          Hindi
 7        asdar@gmail.com            |DRAMA|          Hindi
 10        king@gmail.com            |DRAMA|          Hindi
 12  000.tushar@gmail.com            |DRAMA|          Hindi
 15  000.tushar@gmail.com     |BIOPIC|DRAMA|          Hindi
 16    0007ayan@gmail.com  |HORROR|THRILLER|          Hindi
 19    0007ayan@gmail.com          |ROMANCE|          Hindi

正如您所看到的,EVENT_GENRE字段不包含“ROAMNCE”,但是当我没有“\\”前妻时。从“浪漫”到“浪漫”,我得到了预期的输出。

代码语言:javascript
复制
d = df.query((df['EVENT_GENRE'].str.contains('ROMANCE')) & (df['EVENT_LANGUAGE'] == 'Hindi'))

d
Out[55]: 
     CUSTOMER_MAILID EVENT_GENRE EVENT_LANGUAGE
0   000.tushar@gmail.com   |ROMANCE|          Hindi
2        satya@gmail.com   |ROMANCE|          Hindi
19    0007ayan@gmail.com   |ROMANCE|          Hindi

然后,我尝试了不同的场景,分别是“分部”(发现了奇怪的结果)和“不存在”(“区”)(预期的结果找到)。

我只是想知道‘\’符号是否对str.contains()方法有一定的影响,我非常怀疑它的行为是否像“或”操作。当我尝试的时候

代码语言:javascript
复制
dd = df.query(df['EVENT_GENRE'].str.contains('FANTASY|HORROR'))

dd
Out[21]: 
       CUSTOMER_MAILID               EVENT_GENRE EVENT_LANGUAGE  
8     dfvkme@gmail.com  |FANTASY|HORROR|ROMANCE|        English   
16  0007ayan@gmail.com         |HORROR|THRILLER|          Hindi 

它似乎用“或”手术来对待幻想和恐怖。*不确定。

对于dd = df.query(df'EVENT_GENRE'.str.contains('|FANTASY|HORROR|')),它选择所有数据。

据我所知,strind中的所有内容都包含在'‘或"“中,仅作为char处理(除了\t,\r,\n),我不知道逻辑运算符是否曾经以相同的方式工作(正如我在字符串中看到的那样)。

有人能在Adv.中澄清that.Thanks吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 08:04:52

因为|是一个特殊的字符,您需要用\符号转义它:

代码语言:javascript
复制
In [255]: df[df.EVENT_GENRE.str.contains('\|ROMANCE\|')]
Out[255]:
         CUSTOMER_MAILID               EVENT_GENRE EVENT_LANGUAGE
0   000.tushar@gmail.com                 |ROMANCE|          Hindi
2        satya@gmail.com                 |ROMANCE|          Hindi
8       dfvkme@gmail.com  |FANTASY|HORROR|ROMANCE|        English
11  000.tushar@gmail.com        |ROMANCE|THRILLER|        KANNADA
19    0007ayan@gmail.com                 |ROMANCE|          Hindi
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35055806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档