You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 08:48:13