python 使用用户输入过滤Pandas Dataframe

stszievb  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(145)

我正在尝试开发这个代码,其中我将有不同变量的某些输入,这些将使过滤器发生并返回过滤后的 Dataframe ,这个输入将始终只接收一个单一的值,用户将选择较少的选项,如果输入为空,该过滤器必须带来所有的数据。
我没有输入用户输入,因为我先测试函数,但是函数总是返回一个空的 Dataframe ,我找不到原因。下面是我开发的代码:
我没有放置数据框,因为它来自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) ```
nhaq1z21

nhaq1z211#

您必须删除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

相关问题