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

如何正确将字典值匹配至DataFrame的Continent新列?

问题:DataFrame通过字典匹配生成大洲列失败

我有如下DataFrame:

Country    Population      Continent
0                China  1.367645e+09  South America
1        United States  3.176154e+08  South America
2                Japan  1.274094e+08  South America
3       United Kingdom  6.387097e+07  South America
4   Russian Federation  1.435000e+08  South America
5               Canada  3.523986e+07  South America
6              Germany  8.036970e+07  South America
7                India  1.276731e+09  South America
8               France  6.383735e+07  South America
9          South Korea  4.980543e+07  South America
10               Italy  5.990826e+07  South America
11               Spain  4.644340e+07  South America
12                Iran  7.707563e+07  South America
13           Australia  2.331602e+07  South America
14              Brazil  2.059153e+08  South America

以及用于匹配的字典:

ContinentDict  = {'China':'Asia', 
                  'United States':'North America', 
                  'Japan':'Asia', 
                  'United Kingdom':'Europe', 
                  'Russian Federation':'Europe', 
                  'Canada':'North America', 
                  'Germany':'Europe', 
                  'India':'Asia',
                  'France':'Europe', 
                  'South Korea':'Asia', 
                  'Italy':'Europe', 
                  'Spain':'Europe', 
                  'Iran':'Asia',
                  'Australia':'Australia', 
                  'Brazil':'South America'}

我想通过匹配Country列和字典的键,生成正确的Continent列,尝试了以下代码:

for country in df['Country']:    
    df['Continent'] = ContinentDict[country]

但结果整列都被填充为South America,无法得到每个国家对应的正确大洲值。


解决方法

问题原因

你写的循环逻辑存在错误:每次循环都会把整个Continent列赋值为当前国家对应的大洲,循环到最后一个国家(Brazil)时,整列就都被覆盖成它对应的South America,前面的所有赋值操作都无效了。

正确实现方式

Pandas提供了高效的map()方法,专门用于这种列与字典的映射匹配,无需手动编写循环:

df['Continent'] = df['Country'].map(ContinentDict)

执行后,Continent列会自动根据每个国家匹配字典中的对应值,得到正确结果:

Country    Population      Continent
0                China  1.367645e+09           Asia
1        United States  3.176154e+08  North America
2                Japan  1.274094e+08           Asia
3       United Kingdom  6.387097e+07         Europe
4   Russian Federation  1.435000e+08         Europe
5               Canada  3.523986e+07  North America
6              Germany  8.036970e+07         Europe
7                India  1.276731e+09           Asia
8               France  6.383735e+07         Europe
9          South Korea  4.980543e+07           Asia
10               Italy  5.990826e+07         Europe
11               Spain  4.644340e+07         Europe
12                Iran  7.707563e+07           Asia
13           Australia  2.331602e+07      Australia
14              Brazil  2.059153e+08  South America

补充说明

如果担心存在字典中没有的国家导致报错,可以添加na_action='ignore'参数忽略匹配失败的行:

df['Continent'] = df['Country'].map(ContinentDict, na_action='ignore')

内容的提问来源于stack exchange,提问作者Vicente Parra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:15:44