Pandas str.contains 用于部分字符串的精确匹配
Posted
技术标签:
【中文标题】Pandas str.contains 用于部分字符串的精确匹配【英文标题】:Pandas str.contains for exact matches of partial strings 【发布时间】:2016-01-16 13:59:07 【问题描述】:我有一个 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 列中搜索 exact 部分字符串匹配项的任何建议?
谢谢!
【问题讨论】:
【参考方案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
。)
【讨论】:
感谢帝斯曼!我应该在文档中发现这一点。 (我还认为 lambda 表达式应该可以工作。ex
肯定是在代码中定义的......也许它与我使用 python 调试器在set_trace
尝试它的事实有关)。以上是关于Pandas str.contains 用于部分字符串的精确匹配的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pandas 中向 .str.contains 添加多个字符串? [复制]
pandas str.contains 匹配多个字符串并获取匹配的值