Pandas str.contains用于部分字符串的精确匹配

时间:2015-10-18 02:49:19

标签: python regex pandas contains

我有一个DataFrame(我称之为test),其中包含一个包含文件路径的列,我想使用部分路径过滤数据。

                              full_path
0    C:\data\Data Files\BER\figure1.png
1    C:\data\Data Files\BER\figure2.png
2    C:\data\Previous\Error\summary.png
3        C:\data\Data Files\Val\1x2.png
4        C:\data\Data Files\Val\2x2.png
5         C:\data\Microscopy\defect.png

要查找的部分路径是:

ex = 'C:\\data\\Microscopy'

我已尝试str.contains,但

test.full_path.str.contains(ex)

0    False
1    False
2    False
3    False
4    False
5    False

我希望索引5的值为True。起初我认为问题可能是路径字符串由于与转义字符的差异而实际上不匹配,但是:

ex in test.full_path.iloc[5]

等于True。经过一番挖掘,我认为str.contains的论证应该是一个正则表达式,所以也许部分路径中的“\”是搞乱的?

我也尝试过:

test.full_path.apply(lambda x: ex in x)

但这会给NameError: name 'ex' is not defined。这些DataFrame中可能包含很多行,所以我也担心apply函数效率可能不高。

有关如何搜索完全部分字符串匹配的DataFrame列的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以传递regex=False以避免在解释str.contains的参数时出现混淆:

>>> df.full_path.str.contains(ex)
0    False
1    False
2    False
3    False
4    False
5    False
Name: full_path, dtype: bool
>>> df.full_path.str.contains(ex, regex=False)
0    False
1    False
2    False
3    False
4    False
5     True
Name: full_path, dtype: bool

(除此之外:您的lambda x: ex in x应该有用.NameError是由于某种原因您未定义ex的标志。)