【问题标题】:Searching a pandas dataframe for multiple strings在 pandas 数据框中搜索多个字符串
【发布时间】: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 的建议,将“列表”重新标记为“信息”

【问题讨论】:

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

标签: python pandas string list dataframe


【解决方案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...
  • 好的,现在可以正常使用了,非常感谢!
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多