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

end*_*xen 6 python regex contains pandas

我有一个 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
Run Code Online (Sandbox Code Playgroud)

查找的部分路径是:

ex = 'C:\\data\\Microscopy'
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了str.contains,但是,

test.full_path.str.contains(ex)

0    False
1    False
2    False
3    False
4    False
5    False
Run Code Online (Sandbox Code Playgroud)

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

ex in test.full_path.iloc[5]
Run Code Online (Sandbox Code Playgroud)

等于True。经过一番挖掘,我认为参数应该str.contains是正则表达式,所以也许部分路径中的“\”把事情搞砸了?

我也尝试过:

test.full_path.apply(lambda x: ex in x)
Run Code Online (Sandbox Code Playgroud)

但这给出了NameError: name 'ex' is not defined. 这些数据帧中可能有很多行,所以我还担心该apply函数可能不是很有效。

关于如何在 DataFrame 列中搜索精确的部分字符串匹配有什么建议吗?

谢谢!

DSM*_*DSM 3

您可以传递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
Run Code Online (Sandbox Code Playgroud)

(旁白:你lambda x: ex in x应该已经工作了。NameError 是你由于某种原因没有定义的标志ex。)