我有海洋geopandas,其中包含1个multipolygon(来源:naturalearthdata.com)
我还有另一个数据框,其中包含了大量的经度和纬度信息
我想添加一个新列,如果Point在海洋中(在多重多边形内),该列将为True
zipfile = "ne_10m_ocean/ne_10m_ocean.shp"
ocean_gpd = geopandas.read_file(zipfile)
df = pd.DataFrame({
'lon': [120.0,120.1,120.2,120.3,120.4],
'lat': [10.0,10.1,10.2,10.3,10.4]
})
for index, row in df.iterrows():
df.loc[index,'is_ocean'] = ocean_gpd.contains(Point(x['lon'],x['lat'])
但是它太慢了,我试着这样使用lambda函数
df = df.assign(is_ocean = lambda x: ocean_gpd.contains(Point(x['lon'],x['lat']))
但失败,错误为cannot convert the series to <class 'float'>
有谁知道如何在geopandas中做更好的个人点检查?
注意:我刚刚意识到,对于多边形数据,我使用了10m一个(更详细的多边形),如果我使用110m它要好得多,但在未来,也许我需要使用10m
1条答案
按热度按时间qpgpyjmq1#
你可以这样使用
apply
:其返回: