在Pandas中按Country列名连接多个DataFrame并填充空值为np.nan
解决多DataFrame按Country外连接并填充NaN的问题
没问题,这可以通过Pandas的**外连接(outer join)**轻松实现,正好匹配你需要保留所有国家、缺失值用np.nan填充的需求。我给你分步演示:
1. 先模拟你的三个DataFrame
首先我们把你描述的数据转换成可运行的Pandas代码:
import pandas as pd import numpy as np # 第一个DataFrame df1 = pd.DataFrame({ 'Country': ['Afghanistan', 'Albania'], 'col1': [6.4, 7.3] }) # 第二个DataFrame df2 = pd.DataFrame({ 'Country': ['Afghanistan', 'Algeria'], 'col2': [610, 983] }) # 第三个DataFrame df3 = pd.DataFrame({ 'Country': ['Afghanistan', 'Angola'], 'col3': [1, 2] })
2. 合并DataFrame的两种方法
方法一:逐步合并(适合新手理解)
我们可以先合并前两个DataFrame,再和第三个合并,全程使用外连接确保所有国家都被保留:
# 第一步:合并df1和df2,按Country外连接 merged_step1 = pd.merge(df1, df2, on='Country', how='outer') # 第二步:把结果和df3合并 final_df = pd.merge(merged_step1, df3, on='Country', how='outer')
方法二:批量合并(适合多个DataFrame的场景)
如果以后你有更多DataFrame要合并,用functools.reduce可以一次性完成,更高效:
from functools import reduce # 把所有要合并的DataFrame放到一个列表里 dfs_list = [df1, df2, df3] # 用reduce批量执行外连接合并 final_df = reduce(lambda left, right: pd.merge(left, right, on='Country', how='outer'), dfs_list)
3. 最终结果
运行上面的代码后,你会得到如下结果(缺失值自动用np.nan填充):
Country col1 col2 col3 0 Afghanistan 6.4 610.0 1.0 1 Albania 7.3 NaN NaN 2 Algeria NaN 983.0 NaN 3 Angola NaN NaN 2.0
注意:你给出的示例结果中Afghanistan的col2值是601,和你描述的原始数据610不一致,若需要调整只需修改df2中的对应数值即可。
内容的提问来源于stack exchange,提问作者Socka
相关产品推荐
相关产品推荐

