Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Cartopy shapereader记录中获取特定国家/地区的信息_Python_Python 3.x_Pandas_Generator_Cartopy - Fatal编程技术网

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

Python 从Cartopy shapereader记录中获取特定国家/地区的信息,python,python-3.x,pandas,generator,cartopy,Python,Python 3.x,Pandas,Generator,Cartopy,我正在绘制国家级的世界地图数据,使用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',

我正在绘制国家级的世界地图数据,使用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))

我的问题是:有没有一种更简洁的方法可以从
国家中提取特定国家的数据,因为它是一个生成器。如果我能做像这样的事情,那就更好了

for country in my_data.index.to_list():
   
   geometry = countries[country].geometry

   ax.add_geometries(geometry,
                     ccrs.PlateCarree(),
                     facecolor = cmap(plot_val))
原因是我在
my_data
中的国家索引与
国家中的国家名称不一致。我有一个分层的
try:,除了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()
检查此示例: