在 pandas 数据框中搜索多个字符串

Posted

技术标签:

【中文标题】在 pandas 数据框中搜索多个字符串【英文标题】:Searching a pandas dataframe for multiple strings 【发布时间】:2022-01-03 01:43:44 【问题描述】:

我有一个包含“名称”列的数据框 (df),并且我有一个单独的字符串列表,其格式为:

info = ['AAA.123+456.789', 'BBB.987+654.321', 'CCC.321-654.987']

等等。我想使用列表中的字符串搜索 df 中的“名称”列,并将结果存储在单独的数据框 (df2) 中。我用过:

df2 = df.loc[df['Names'].str.contains('|'.join(info))]

然而 df2 的输出(在 spyder 变量资源管理器中)要么是一个空数据框,要么只返回一个结果。我不确定如何解决这个问题,所以任何建议都将不胜感激 - 谢谢!

编辑

Index Names Quantity 1 Quantity 2 Quantity 3 Quantity 4
0 AAA 12.3 4.56 7.89 10.1112
1 BBB 3.21 65.4 98.7 1.21110
2 CCC 456.23 1.23 10101 101.112
3 DDD 6.4 3.21 0.2029 1211.10

是 df 内容的示例(它是 6 列和非常多的行数)

编辑 2

根据 Serge 在 cmets 的建议,将“列表”重新标记为“信息”

【问题讨论】:

请展示您的数据框内容示例。 不要逐个调用你的列表。保留用于定义列表。 另外,尝试提供一个最小可重现的例子。尝试创建一些产生相同问题的虚拟数据。例如,使用不太复杂的字符串模式以开头 【参考方案1】:

你可以这样做。如果你的 df 是

df = pd.DataFrame("Names":['AAA.123+456.789', "BBB.987+654.321", "W1234", "A_aa_1+.", "Z54"], "col1":[1,2,3,4,5])

info = ['AAA.123+456.789', 'BBB.987+654.321', 'CCC.321-654.987']

df2 = df[df['Name'].isin(info)]

给予:

    Names  col1
0  AAA.123+456.789     1
1  BBB.987+654.321     2

【讨论】:

嗯好吧,奇怪的是当我使用上述方法时,我仍然得到一个 6 列的空 DataFrame 作为 df2 的结果?我几乎可以肯定 'info' 中的字符串在 df 中,因为我已将 df 中的相应条目复制到 info... 好的,现在可以正常使用了,非常感谢!

以上是关于在 pandas 数据框中搜索多个字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 数据框中过滤多个列以获取相同的字符串

在pandas数据框中搜索文本列而不进行循环

在 Pandas 中的多列上查找字符串

从 pandas 数据框中的元组列中删除元素

检查熊猫数据框中是不是有多个子字符串[重复]

Pandas 过滤多个串联子串