首页 > 解决方案 > 使用reduce连接多个数据框,其中一个为空

问题描述

我有 3 个 pd 数据框,我想加入公共列。

前任:

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]})

我正在使用reduce

dfs=[df1,df2,df3]
final = reduce(lambda left, right: pd.merge(left, right, on=cols_common), dfs)

问题:其中一个 df 可能是空的。如果其中一个为空,则此命令将引发错误。有什么建议吗?

编辑:

预期的结果是加入的数据框。应该忽略空数据框。我想知道是否有办法做到这一点,同时避免使用 try except 子句的 for 循环。

标签: pythonpandas

解决方案


如果需要删除空 DataFrame,请使用列表理解DataFrame.empty

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

dfs=[df1,df2,df3]
cols_common = ['a','b']

dfs1 = [x for x in dfs if not x.empty]
final = reduce(lambda left, right: pd.merge(left, right, on=cols_common), dfs1)
print (final)
   a  b  c
0  1  3  1
1  3  6  5

推荐阅读