如果缩写
包含'isin
和str.contains
方法的缩写
包含'CS','DE','CM'
,我尝试过滤行:
id,abbreviation,countries
1,CH,Switzerland
2,CZ,Czech Republic
3,CL,Chile
4,CM,Cameroon
5,CN,China
6,DJ,Djibouti
7,CR,Costa Rica
8,CS,Czech
9,DE,Germany
10,CY,Cyprus
当我不使用换行符或反斜杠时,两者都可以正常工作并获得相同的结果:
mask1 = df['abbreviation'].str.contains('CS|DE|CM')
df[mask1]
mask2 = df['abbreviation'].isin(['CS', 'DE', 'CM'])
df[mask2]
出:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
但是我注意到在使用反斜杠时,如果有太多的值需要过滤,那么str.contains
不能给出正确的答案,但是isin
仍然有效。
第一个带有反斜杠的选项,仅过滤掉CS
包含的行:
mask1 = df['abbreviation'].str.contains('CS|\
DE|\
CM')
df[mask1]
出:
id abbreviation countries
7 8 CS Czech
带反斜杠的第二个选项会生成正确的结果:
mask2 = df['abbreviation'].isin(['CS', \
'DE', \
'CM'])
df[mask2]
出:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
我只是想知道是否有人可以给我建议如何解决这个问题,如果我想对str.contains
使用换行符?谢谢。
问题来源:stackoverflow
str.contains
属性,(来自文档)函数签名是,
str.contains(pat,case = True,flags = 0,na = nan,regex = True)`
在Python中,默认情况下,正则表达式模式(上面的pat)不允许使用空格/换行符。
如果希望使模式更具可读性,例如带有注释,空格(应忽略)等,则必须向函数调用提供re.VERBOSE
(doc re.VERBOSE)
因此,对于您的代码,要使用预期的模式,
In [52]: mask1 = df['abbreviation'].str.contains('CS|\
...: DE|\
...: CM', flags=re.VERBOSE)
...: df[mask1]
Out[52]:
id abbreviation countries
3 4 CM Cameroon
7 8 CS Czech
8 9 DE Germany
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。