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

Pandas str.contains for exact matches of partial strings

我有一个 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\Valx2.png
4        C:\data\Data Files\Valx2.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 列中搜索精确 部分字符串匹配有什么建议吗?

谢谢!

您可以传递 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 的标志。)