Python中使用函数过滤Pandas数据后导出Excel为空的问题
解决Pandas过滤后导出Excel为空的问题
你的代码导出Excel为空,核心原因是过滤条件没有匹配到任何数据,具体问题点和修正方案如下:
问题排查
1. 大小写不匹配
传入的参数'vermelho'是小写,但DataFrame中FarolAging列的值是"Vermelho"(首字母大写),isin方法是大小写敏感的,导致这一条件无法匹配。
2. 日期条件不匹配
传入的'Até 20 dias'和DataFrame中Dias Pendentes列的"20 dias"完全不一致,没有匹配项。
3. 空字符串过滤逻辑错误
传入的prod是空字符串'',代码中df['Produto'].isin([''])会去匹配值为空的行,但你的DataFrame里Produto列都是Prod1/Prod2,没有空值,这直接导致条件不满足。
4. 列名拼写错误
函数中引用的df['Coordenador'],但你创建的DataFrame列名是Coord,列名不匹配会导致条件失效(甚至可能报错)。
修正后的代码
import pandas as pd import numpy as np # 修正列名,保持和函数中引用的一致 df = pd.DataFrame(np.array([["Vermelho","Verde","Amarelo"], ["20 dias","40 dias","60 dias"], ["Prod1","Prod1","Prod2"], ["Alexandre Denardi","Alexandre Denardi","Lucas Fernandes"], ["Guilherme De Oliveira Moura","Leonardo Silva","Julio Cesar"], ["Anna Claudia","Bruno","Bruno"]]), columns=["FarolAging","Dias Pendentes","Produto","Officer","Analista","Coordenador"]) def update_output(farol,dias,prod,officer,anal,coord): # 初始化条件为全True,空参数时不限制对应列 cond = pd.Series([True]*len(df), index=df.index) # 仅当参数非空时,添加对应过滤条件 if farol: # 转小写实现大小写不敏感匹配 cond &= df['FarolAging'].str.lower() == farol.lower() if dias: cond &= df['Dias Pendentes'] == dias if prod: cond &= df['Produto'] == prod if officer: cond &= df['Officer'] == officer if anal: cond &= df['Analista'] == anal if coord: cond &= df['Coordenador'] == coord df_f = df.loc[cond] df_f.to_excel('C:\\Users\\brechtl\\Downloads\\File.xlsx', index=False) # 打印过滤结果行数,方便调试 print(f"过滤后共{len(df_f)}行数据") # 调整日期参数为匹配值,空参数保持不变 update_output('vermelho', '20 dias','','Alexandre Denardi','Guilherme De Oliveira Moura','Anna Claudia')
关键修正说明
- 统一列名:将DataFrame的
Coord改为Coordenador,确保和函数中的引用一致。 - 大小写不敏感匹配:通过
str.lower()消除大小写差异,避免因大小写导致的匹配失败。 - 优化空参数逻辑:当参数为空时,不对该列做过滤,符合“不限制该条件”的实际需求,而不是去匹配空值。
- 修正日期参数:将
'Até 20 dias'改为DataFrame中存在的'20 dias',如果实际业务中日期是Até 20 dias,则需要同步修改DataFrame中的对应值。
内容的提问来源于stack exchange,提问作者Lucas Brecht Fernandes
相关产品推荐
相关产品推荐

