gpt4 book ai didi

python - 如何过滤包含列表中任何字符串的 Pandas Dataframe 行?

转载 作者:行者123 更新时间:2023-11-28 21:32:43 24 4
gpt4 key购买 nike

我的数据框具有如下值:

  A                    B
["I need avocado" "something"]
["something" "I eat margarina"]

我想找到符合以下条件的行:

在行的任何 列中,该列的值包含在列表中。例如,对于列表:

["apple","avocado","bannana"]

只有这一行应该匹配: [“我需要鳄梨”“东西”]

这条线不起作用:

dataFiltered[dataFiltered[col].str.contains(*includeKeywords)]

返回:

{TypeError}unsupported operand type(s) for &: 'str' and 'int'

我该怎么办?

最佳答案

设置

df = pd.DataFrame(dict(
A=['I need avocado', 'something', 'useless', 'nothing'],
B=['something', 'I eat margarina', 'eat apple', 'more nothing']
))
includeKeywords = ["apple", "avocado", "bannana"]

问题

                A                B
0 I need avocado something # True 'avocado' in A
1 something I eat margarina
2 useless eat apple # True 'apple' in B
3 nothing more nothing

解决方案


df[df.stack().str.contains('|'.join(includeKeywords)).any(level=0)]

A B
0 I need avocado something
2 useless eat apple

详情

这会生成一个 regex 搜索字符串。在 regex 中,'|' 表示 or。所以对于 regex 搜索,这表示匹配 'apple''avocado''bannana'

kwstr = '|'.join(includeKeywords)
print(kwstr)

apple|avocado|bannana

堆叠会压扁我们的DataFrame

df.stack()

0 A I need avocado
B something
1 A something
B I eat margarina
2 A useless
B eat apple
3 A nothing
B more nothing
dtype: object

幸运的是,pandas.Series.str.contains 方法可以处理 regex 并且它会生成一个 bool 值 Series

df.stack().str.contains(kwstr)

0 A True
B False
1 A False
B False
2 A False
B True
3 A False
B False
dtype: bool

此时我们可以巧妙地使用 pandas.Series.any,建议它只关心 level=0

mask = df.stack().str.contains(kwstr).any(level=0)
mask

0 True
1 False
2 True
3 False
dtype: bool

通过使用 level=0,我们在生成的 Series 中保留了原始索引。这使得它非常适合过滤 df

df[mask]

A B
0 I need avocado something
2 useless eat apple

关于python - 如何过滤包含列表中任何字符串的 Pandas Dataframe 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com