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

如何将地点数据转换为ISO 3166代码以制作Choropleth地图

解决地点转ISO 3166代码的问题

直接截取Location字段最后字符的思路行不通,因为发射地点的格式大概率不统一(比如有的是“具体场地, 国家”,有的可能包含地区名),而且字符串处理不当很容易出现NaN。下面是几种靠谱的解决方案:

1. 用地理编码工具自动解析

借助geopy库的地理编码功能,能自动识别各种格式的地点字符串,返回对应的ISO代码:

  • 先安装库:pip install geopy
  • 示例代码:
from geopy.geocoders import Nominatim
import pandas as pd

# 初始化编码器,user_agent随便填个标识
geolocator = Nominatim(user_agent="launch_loc_converter")

def fetch_iso_code(location):
    try:
        # 解析地点
        loc_data = geolocator.geocode(location, exactly_one=True)
        if loc_data:
            # 提取alpha-2格式的代码,转成大写
            alpha2_code = loc_data.raw['address'].get('country_code', '').upper()
            # 如果需要alpha-3格式(比如USA、FRA),可以用映射表转换
            alpha2_to_alpha3 = {'US':'USA', 'FR':'FRA', 'RU':'RUS', 'CN':'CHN'}
            return alpha2_to_alpha3.get(alpha2_code, alpha2_code)
        return None
    except Exception:
        return None

# 给数据集新增ISO代码列
df['ISO_Code'] = df['Location'].apply(fetch_iso_code)

2. 手动构建映射字典(适合地点数量少的情况)

如果你的发射地点列表是固定的,直接手动整理每个地点对应的ISO代码,效率更高:

# 手动构建地点到ISO代码的映射
loc_iso_map = {
    '肯尼迪航天中心': 'USA',
    '圭亚那太空中心': 'FRA',
    '拜科努尔航天发射场': 'KAZ',
    '酒泉卫星发射中心': 'CHN'
    # 把你数据里的所有地点都补充进来
}

# 批量转换
df['ISO_Code'] = df['Location'].map(loc_iso_map)

# 处理未匹配的地点(如果有的话)
unmatched_locs = df[df['ISO_Code'].isna()]['Location'].unique()
print("未匹配的地点:", unmatched_locs)
# 手动补充这些地点的映射后重新赋值

3. 优化字符串分割(如果地点格式相对统一)

如果你的Location列格式都是“场地名称, 国家/地区”这种统一格式,可以用字符串分割提取国家,再映射成ISO代码:

# 分割字符串,提取最后一部分(国家)
df['Country'] = df['Location'].str.split(', ').str[-1].str.strip()

# 国家到ISO代码的映射
country_iso_map = {
    '美国': 'USA',
    '法国': 'FRA',
    '俄罗斯': 'RUS',
    '中国': 'CHN'
}

df['ISO_Code'] = df['Country'].map(country_iso_map)

注意:如果有格式不统一的行,这个方法会失效,需要先清理数据(比如处理空值、异常格式的字符串)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:43:14