一尘不染

使用用户输入过滤 Pandas 数据框

py

我正在尝试开发此代码,其中我将为不同的变量提供某些输入,这些将使过滤器发生并返回过滤后的数据帧,此输入将始终只接收一个值,用户将选择更少的选项,如果输入为空,则该过滤器必须带入所有数据。

我没有输入用户输入,因为我首先测试了该函数,但是,该函数总是返回一个空数据框,我无法找出原因。这是我正在开发的代码:

我没有放数据框,因为它来自 excel,但如果有必要,我会放一个适合的样本

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()


    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) ```

阅读 94

收藏
2023-02-01

共1个答案

一尘不染

您必须删除中的方括号,isin因为您已经有了列表:

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()


    # Transform .isin([...]) into .isin(...)
    dados2 = (df.loc[df['FarolAging'].isin(FarolAging1)
              & (df['Dias Pendentes'].isin(DiasPendentes))
              & (df['Produto'].isin(Produto))
              & (df['Officer'].isin(Officer))])
    print(dados2)
    return dados2  # don't forget to return something

输出:

>>> func(FarolAging1, DiasPendentes, Produto, Officer)

  FarolAging Dias Pendentes Produto            Officer                     Analista         Coord
0   Vermelho        20 dias   Prod1  Alexandre Denardi  Guilherme De Oliveira Moura  Anna Claudia
2023-02-01