我有一个名为df = pd.read_csv('my.csv')的数据文件
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没有返回预期的输出。
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”,但是当我没有“\\”前妻时。从“浪漫”到“浪漫”,我得到了预期的输出。
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()方法有一定的影响,我非常怀疑它的行为是否像“或”操作。当我尝试的时候
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吗?
发布于 2016-01-28 08:04:52
因为|是一个特殊的字符,您需要用\符号转义它:
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| Hindihttps://stackoverflow.com/questions/35055806
复制相似问题