Sat*_*tya 3 python string pandas
我有一个名为df的数据帧为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
Run Code Online (Sandbox Code Playgroud)
但是当我在查询的时候,我发现了一些差异,因为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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,EVENT_GENRE字段不包含'ROAMNCE',但当我没有'|'时 恩.'| ROMANCE |' 到'ROMANCE',我得到了预期的输出.
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
Run Code Online (Sandbox Code Playgroud)
然后我用"|"尝试了不同的场景 (发现奇怪的结果)和没有('|')(找到预期的结果).
我很好奇,如果'|' 符号对str.contains()方法有一些影响.我非常怀疑它的行为类似于"或"操作.当我尝试时,Bcoz
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
Run Code Online (Sandbox Code Playgroud)
因为它似乎用"或"操作来对待FANTASY和HORROR.***不确定
并使用dd = df.query(df ['EVENT_GENRE'].str.contains('| FANTASY | HORROR |'))选择所有数据.
据我所知,在一个strind中,所有包含在''或'中仅作为char处理(除了\ t,\ r,\n).但我不知道逻辑运算符是否曾以相同的方式工作(我有很多次看到并在一个字符串内).
任何人都可以澄清一下.谢谢Adv.
默认情况下,contains将字符串视为正则表达式以匹配字符串.所以你"|ROMANCE|"被视为正则表达式.由于第一个和最后一个交替是空的(即,在第一个|或最后一个之前没有任何内容),它可以匹配空字符串,因此它总是匹配.
您可以传递regex=False参数以contains强制它仅匹配您的文字字符串.