【问题标题】:Get information about a specific country from Cartopy shapereader records从 Cartopy shapereader 记录中获取有关特定国家/地区的信息
【发布时间】:2020-11-24 18:30:09
【问题描述】:

我正在使用 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 是一个生成器,是否有一种更简洁的方法可以从特定国家/地区提取数据。如果我能做类似的事情,那将是非常可取的

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: 的分层列表,其中包含名称的字典来处理我的数据集中未单独列出的所有依赖状态等。

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

【问题讨论】:

标签: python python-3.x pandas generator cartopy


【解决方案1】:

我对生成器没有任何见解,但我回答了一个相关问题,即根据国家名称和值列表在地图上为国家着色 https://stackoverflow.com/a/61525984/13208790

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多