【问题标题】:Filter dataframe list values contained in dataframe cells过滤数据框单元格中包含的数据框列表值
【发布时间】:2020-01-18 14:37:57
【问题描述】:

我有一个数据框 products`,其中有一列包含以分号分隔的标签列表,例如

Tags
________________
tag1;tag2;tag4
tag3;tag1
tag4;tag2;tag6
...etc

我想根据标签列表中是否包含Tag2 来过滤products

我尝试了以下方法:

products["Tag2" in products["Tags"].str.split(";", expand=True)]

但是收到KeyError: False

任何提示将不胜感激。

提前致谢。

【问题讨论】:

  • df.Tags.str.contains('tag2') ?
  • @harvpan 如果我正在搜索的标签不是我没有搜索的标签的子字符串,这可以达到目的。例如,上面将返回包含 tag2 AND tag 22 的行。
  • 查看答案。
  • product['Tags'].str.split(';',exand=True).eq('tag2').any(1)?

标签: python pandas list filter


【解决方案1】:

我认为这应该可行:

products[products['tags'].apply(lambda x: 'tag2' in x.split(';'))]

【讨论】:

    【解决方案2】:

    一种更好(更智能)的方法是使用get_dummies

    df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    

    输出:

                  Tags
    0   tag1;tag2;tag4
    

    她是涵盖所有情况的更好例子:

    数据

        Tags
    0   tag1;tag2;tag4
    1   tag3;tag1
    2   tag4;tag22;tag6
    3   tag2
    

    代码

    df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    

    输出

                  Tags
    0   tag1;tag2;tag4
    3   tag2
    

    您也可以使用:

    您需要查找子字符串tag2; 以便执行完全匹配。

    df.loc[(df.Tags+';').str.contains('tag2;')]
    

    【讨论】:

    • 也想过这个,但是@QuangHoang 是对的;不过,我很感激你的努力
    • @QuangHoang 好点,我认为标签以; 结尾,编辑即将推出。
    • 我猜(df['Tags'] +';') :-)
    • @QuangHoang 如果我感到绝望,请不要使用该黑客 ;-)
    • @harvpan 只要 tag2 实际存在于数据集中,它就可以工作。不幸的是,如果数据集中不存在 tag2,则会出现 KeyError: tag2 错误。我需要它不返回任何行。
    【解决方案3】:
    您的 DataFrame 中的

    Tags 列实际上包含 字符串

    因此,不要将这些字符串转换为列表,只需检查 每个字符串是否包含tag2

    product[product.Tags.str.contains('tag2')]
    

    结果(对于您的数据)是:

                 Tags
    0  tag1;tag2;tag4
    2  tag4;tag2;tag6
    

    【讨论】:

    • 感谢您的回答,但它不适用于 tag2 位于列表末尾的情况。 ...我可以在值后面附加一个分号,但它看起来很hacky
    • 我检查了 tag1;tag4;​​tag2 作为第一行,它确实出现在输出中。很自然,因为第一行仍然包含 tag2 (当然,最后,但这并不重要)。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 2018-12-20
    • 1970-01-01
    • 2022-01-04
    • 2021-04-18
    • 2018-05-14
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多