You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中查找列表值并提取匹配行?

在Pandas中提取包含列表任意值的行的最优方法

你的现有代码存在一个问题:i[i.isin(numbers)]会保留所有行,但仅在匹配的列显示对应值,不匹配的列会显示NaN,并不是真正提取整行包含目标值的数据。下面是最优实现方案:

核心思路

用isin()判断每个元素是否在目标列表中,再通过any(axis=1)检查每行是否存在至少一个匹配值,以此作为行索引提取整行数据。

修正后的代码

方案1:返回DataFrame(最常用,保留原数据结构)

import pandas as pd
import os

def searchXlsx(xlsx_file: str, numbers: list) -> pd.DataFrame:
    # pd.read_excel可直接接收文件路径,无需手动open
    df = pd.read_excel(os.path.realpath(xlsx_file))
    # 筛选出任意列包含列表中值的行
    result = df[df.isin(numbers).any(axis=1)]
    return result

方案2:返回列表(符合你函数标注的返回类型,每行转字典)

import pandas as pd
import os

def searchXlsx(xlsx_file: str, numbers: list) -> list:
    df = pd.read_excel(os.path.realpath(xlsx_file))
    result_df = df[df.isin(numbers).any(axis=1)]
    # 转成字典列表返回
    return result_df.to_dict('records')

优化技巧

  • 如果只需要在特定列中匹配(比如只在'编号'列查找),可以缩小判断范围,提升效率:
    result = df[df['编号'].isin(numbers)]
    
  • 如果目标列表是字符串且需要模糊匹配,可以用str.contains()结合|拼接匹配条件,但精确匹配场景下isin()是最优选择。

内容的提问来源于stack exchange,提问作者Joka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:09:56