使用reduce合并多个pandas DataFrame时如何忽略空表避免报错
多DataFrame公共列关联自动忽略空表方案
核心思路为在执行reduce合并前,先对DataFrame列表做非空过滤,筛掉所有无数据的空表,再执行合并逻辑即可,无需额外添加异常捕获。
实现步骤
- 用pandas内置的
empty属性做非空判断,会同时覆盖「无列无行」和「有列无行」两种空表场景,过滤掉所有空表 - 为reduce方法设置带公共列的空表作为初始兜底值,无需额外写分支判断处理过滤后列表为空/仅剩余1个表的边界情况
完整代码示例
import pandas as pd from functools import reduce # 公共关联列 cols_common = ['a', 'b'] # 示例数据,可自行插入空表测试 df1=pd.DataFrame({'a':[1,2,3],'b':[3,5,6],'c':[1,2,5]}) df2=pd.DataFrame({'a':[1,1,3],'b':[3,5,6]}) df3=pd.DataFrame({'a':[1,1,1],'b':[3,5,6],'d':[4,5,6]}) # 列表中可加入任意空表测试 dfs = [df1, df2, df3, pd.DataFrame(), pd.DataFrame(columns=['a','b'])] # 第一步:过滤空表 filtered_dfs = [df for df in dfs if not df.empty] # 第二步:执行合并,第三个参数为兜底初始值 final = reduce( lambda left, right: pd.merge(left, right, on=cols_common), filtered_dfs, pd.DataFrame(columns=cols_common) )
内容的提问来源于stack exchange,提问作者Marco Fumagalli
相关产品推荐
相关产品推荐

