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

使用用户输入过滤Pandas DataFrame返回空数据框的问题排查

问题原因与解决方法

核心问题

你的代码返回空DataFrame的根本原因是在isin()方法里错误地将参数嵌套了一层列表。比如FarolAging1本身已经是列表类型,你却写成df['FarolAging'].isin([FarolAging1]),这会让Pandas检查列中的值是否属于[['Vermelho']]这个嵌套列表——而你的DataFrame里的FarolAging列都是字符串,自然匹配不到任何结果。

修复后的代码

import pandas as pd

df = pd.DataFrame({
    "FarolAging": ["Vermelho", "Verde", "Amarelo"],
    "Dias Pendentes": ["20 dias", "40 dias", "60 dias"],
    "Produto": ["Prod1", "Prod1", "Prod2"],
    "Officer": ["Alexandre Denardi", "Alexandre Denardi", "Lucas Fernandes"],
    "Analista": ["Guilherme De Oliveira Moura", "Leonardo Silva", "Julio Cesar"],
    "Coord": ["Anna Claudia", "Bruno", "Bruno"]
})

FarolAging1 = ['Vermelho']
DiasPendentes = []
Produto = []
Officer = []

def func(FarolAging1, DiasPendentes, Produto, Officer):
    # 空列表时替换为对应列的唯一值
    if len(Officer) < 1:
        Officer = df['Officer'].unique()
    if len(FarolAging1) < 1:
        FarolAging1 = df['FarolAging'].unique()
    if len(DiasPendentes) < 1:
        DiasPendentes = df['Dias Pendentes'].unique()
    if len(Produto) < 1:
        Produto = df['Produto'].unique()

    # 去掉isin()里的外层嵌套列表
    dados2 = df.loc[
        df['FarolAging'].isin(FarolAging1) &
        df['Dias Pendentes'].isin(DiasPendentes) &
        df['Produto'].isin(Produto) &
        df['Officer'].isin(Officer)
    ]
    print(dados2)

func(FarolAging1, DiasPendentes, Produto, Officer)

额外优化建议

  • 给函数参数设置默认空列表,避免外部单独定义变量,让代码更简洁:
    def func(FarolAging1=[], DiasPendentes=[], Produto=[], Officer=[]):
        # 函数逻辑不变
    
  • 如果用户输入是单一值而非列表,可以在函数开头先把单一值转为列表,提升函数兼容性:
    def func(FarolAging1=[], DiasPendentes=[], Produto=[], Officer=[]):
        # 处理单一值输入
        FarolAging1 = [FarolAging1] if not isinstance(FarolAging1, list) else FarolAging1
        DiasPendentes = [DiasPendentes] if not isinstance(DiasPendentes, list) else DiasPendentes
        Produto = [Produto] if not isinstance(Produto, list) else Produto
        Officer = [Officer] if not isinstance(Officer, list) else Officer
        
        # 后续逻辑不变
    

内容的提问来源于stack exchange,提问作者Lucas Brecht Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:01:28