我正在尝试开发此代码,其中我将为不同的变量提供某些输入,这些将使过滤器发生并返回过滤后的数据帧,此输入将始终只接收一个值,用户将选择更少的选项,如果输入为空,则该过滤器必须带入所有数据。
我没有输入用户输入,因为我首先测试了该函数,但是,该函数总是返回一个空数据框,我无法找出原因。这是我正在开发的代码:
我没有放数据框,因为它来自 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) ```
您必须删除中的方括号,isin因为您已经有了列表:
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