在pandas中,“Series.str.contains('|')”和“Series.apply(lambda x:'|' in x)”有什么区别?

5
这是用于测试的代码:

import numpy as np # maybe you should download the package
import pandas as pd # maybe you should download the package
data = ['Romance|Fantasy|Family|Drama', 'War|Adventure|Science Fiction',
       'Action|Family|Science Fiction|Adventure|Mystery', 'Action|Drama',
       'Action|Drama|Thriller', 'Drama|Romance', 'Comedy|Drama', 'Action',
       'Comedy', 'Crime|Comedy|Action|Adventure',
       'Drama|Thriller|History', 'Action|Science Fiction|Thriller']

a = pd.Series(data)
print(a.str.contains("|"))
print(a.apply(lambda x:"|" in x))
print(a)

执行上述代码后,您将获得以下三个输出结果:
0     True
1     True
2     True
3     True
4     True
5     True
6     True
7     True
8     True
9     True
10    True
11    True
dtype: bool

print(a.apply(lambda x:"|" in x)) 的输出结果是:

0      True
1      True
2      True
3      True
4      True
5      True
6      True
7     False
8     False
9      True
10     True
11     True
dtype: bool

print(a)输出结果为:

image.png

您可以看到在Series a中,78没有|。然而,print(a.str.contains("|"))的返回值都是True。这里有什么问题?

1个回答

9
在正则表达式中,|具有特殊含义,因此您需要进行转义:

|在RegEx中具有特殊含义,因此您需要对其进行转义:

In [2]: a.str.contains(r"\|")
Out[2]:
0      True
1      True
2      True
3      True
4      True
5      True
6      True
7     False
8     False
9      True
10     True
11     True
dtype: bool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接