geopandas:索引 contains() 方法的歧义
geopandas : ambiguity of indexing contains() method
我有一个简单的点 GeoDataFrames,就像这个:
name geometry
0 Location1 POINT (9.71852 50.56186)
1 Location2 POINT (9.72912 50.55847)
另一方面,我有一个更复杂的GeoDataFrame,它由多边形组成。我的目标是如果点在多边形区域内,则用其他 GDF 的一些信息更新点的 GDF。
所以我想使用 contains() 方法来检查哪些多边形包含一个点。我用一个简单的布尔掩码进行了测试:
mask = polygons.contains(points.loc[0,'geometry'])
selection = polygons.loc[mask]
显然,选择 returns 与第一行 GDF 点匹配的多边形。我想用类似的东西来考虑 GDF 的所有行:
mask = polygons.contains(points['geometry'])
这个掩码没有用,我猜这是一个索引问题,但我不知道如何解决它...
这实际上是现在预期的行为。 GeoSeries.contains
是 row-wise 操作,这意味着如果您执行 polygons.contains(point)
,它将首先对齐两个 GeoSeries,然后检查第 0 行上的多边形是否包含第 0 行上的点等
如果你想用多边形的数据更新点,你应该使用geopandas.sjoin
- https://geopandas.readthedocs.io/en/latest/docs/user_guide/mergingdata.html#spatial-joins
在你的情况下,这可能看起来类似于:
points_with_data = geopandas.sjoin(points, polygons, how='left')
我有一个简单的点 GeoDataFrames,就像这个:
name geometry
0 Location1 POINT (9.71852 50.56186)
1 Location2 POINT (9.72912 50.55847)
另一方面,我有一个更复杂的GeoDataFrame,它由多边形组成。我的目标是如果点在多边形区域内,则用其他 GDF 的一些信息更新点的 GDF。
所以我想使用 contains() 方法来检查哪些多边形包含一个点。我用一个简单的布尔掩码进行了测试:
mask = polygons.contains(points.loc[0,'geometry'])
selection = polygons.loc[mask]
显然,选择 returns 与第一行 GDF 点匹配的多边形。我想用类似的东西来考虑 GDF 的所有行:
mask = polygons.contains(points['geometry'])
这个掩码没有用,我猜这是一个索引问题,但我不知道如何解决它...
这实际上是现在预期的行为。 GeoSeries.contains
是 row-wise 操作,这意味着如果您执行 polygons.contains(point)
,它将首先对齐两个 GeoSeries,然后检查第 0 行上的多边形是否包含第 0 行上的点等
如果你想用多边形的数据更新点,你应该使用geopandas.sjoin
- https://geopandas.readthedocs.io/en/latest/docs/user_guide/mergingdata.html#spatial-joins
在你的情况下,这可能看起来类似于:
points_with_data = geopandas.sjoin(points, polygons, how='left')