pandas.Series.str.contains在Python中不支持换行符或反斜杠

2024-07-08 07:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果abbreviation包含'CS', 'DE', 'CM',我尝试使用isinstr.contains方法筛选行:

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的换行符?谢谢


Tags: iddfcmdecscountriescontains斜杠
1条回答
网友
1楼 · 发布于 2024-07-08 07:54:15

str.contains属性,(来自文档)函数签名是

str.contains(pat, case=True, flags=0, na=nan, regex=True)

在Python中,默认情况下,正则表达式模式(pat)不允许空格/换行符

如果希望模式更具可读性,例如带有注释、空格(应该忽略)等,则必须为函数调用提供re.VERBOSE(docre.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                              

相关问题 更多 >

    热门问题