python - 如果列位于列表的任何部分,则过滤数据框

标签 python pandas dataframe

我正在尝试将数据帧过滤为列表中具有列值的行。但是,列中的值不会与列表完全匹配。我可以使用某种通配符或进一步包含吗?

例如,根据下面的列表和数据框,我想返回或过滤到第 0 行。

list = ["123 ABC", "456 DEF", "789 GHI"]

id    idlist
0      ABC    
1      XYZ

类似

df_2 = df[df["idlist"].isin(list)]

不起作用,因为它将搜索完全匹配的内容。

最佳答案

这是一个比平常更复杂的字符串匹配问题,但您可以使用列表理解来提高性能:

lst = ["123 ABC", "456 DEF", "789 GHI"]
df['match'] = [any(x in l for l in lst) for x in df['idlist']]
df

   id idlist  match
0   0    ABC   True
1   1    XYZ  False

要简单过滤,请使用

df[[any(x in l for l in lst) for x in df['idlist']]]

   id idlist
0   0    ABC

列表推导式是我用于许多字符串操作的常用语法。我在 For loops with pandas - When should I care? 中详细介绍了它们的优点。

如果您需要处理 NaN,请使用具有 try-catch 处理功能的函数。

def search(x, lst):
    try:
        return any(x in l for l in lst)
    except TypeError:
        return False

df[[search(x, lst) for x in df['idlist']]]

   id idlist
0   0    ABC

关于python - 如果列位于列表的任何部分,则过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56245450/

相关文章:

python - 为 Pandas DataFrame 的每一行查找跨多列的模式

javascript - Go 无法处理基准测试(而 Python 和 Node.js 可以)?

python - 将 django cms 页面渲染为 json

python - python 中 not() 的顺序有什么问题?

python - Pandas :根据一列中字符串的特定组合选择行对

python - 将python sklearn概率估计制作成索引序列

python - tensorflow: <built-in function AppendInt32ArrayToTensorProto> 返回 NULL 没有设置错误

python - 我如何将字符串索引转换为整数索引

python - 如何在数据框中删除重复项并首先保留两个异常(exception)?

python - 删除时区(+01 :00) from DateTime