从 Cartopy shapereader 记录中获取有关特定国家/地区的信息

Get information about a specific country from Cartopy shapereader records

我正在绘制国家级别的世界地图数据,使用 Cartopy shapereader 自然地球记录中提供的几何图形:

import cartopy.io.shapereader as shpreader
import pandas as pd

my_data = pd.read_csv("my_data.csv", index_col = 0)

shpfilename = shpreader.natural_earth(resolution='50m',
                                      category='cultural',
                                      name='admin_0_countries')
reader = shpreader.Reader(shpfilename)
countries = reader.records()

for country in countries:

   sovgt = country.attribute["SOVEREIGNT"]

   plot_val = my_data.loc[sovgt]

   ax.add_geometries([country.geometry],
                     ccrs.PlateCarree(),
                     facecolor = cmap(plot_val))

我的问题是:鉴于 countries 是一个生成器,是否有更简洁的方法从 countries 中提取有关特定国家/地区的数据。如果我能做类似

的事情,那将是非常可取的
for country in my_data.index.to_list():
   
   geometry = countries[country].geometry

   ax.add_geometries(geometry,
                     ccrs.PlateCarree(),
                     facecolor = cmap(plot_val))

这是因为我在 my_data 中的国家索引与 countries 中的国家名称不一致。我有一个 try:, except KeyError: 的分层列表,其中包含名称字典,用于处理所有未在我的数据集中单独列出的依赖状态等。

这可能是一个关于生成器对象的更普遍的问题。如果这也是一个愚蠢的问题,我们深表歉意。

我对生成器没有任何见解,但我回答了一个相关问题,即根据国家名称和值列表为地图上的国家着色

关键步骤是将自然地球数据读入 geopandas,因此您可以使用数据框而不是生成器。不是很优雅,但应该可以工作:

import geopandas
from cartopy.io import shapereader
shpfilename = shapereader.natural_earth('50m', 'cultural', 'admin_0_countries')
df = geopandas.read_file(shpfilename)
df.head()