在 pandas 和 geopandas 之间转换而不保留 'geometry' 列限制

Converting between pandas and geopandas without preserving 'geometry' column restrictions

我有一个 geopandas df,它有 'geometry' 列。显然 'geometry' 列是 geopandas dfs 中的一个特殊列。我可以将 BaseGeometryNone 值添加到 'geometry' 列。

gdf
            name  ...                   geometry
0     Storages_0  ...   POINT (9.34153 47.90014)
1     Storages_1  ...  POINT (12.48775 48.04216)
2     Storages_2  ...  POINT (12.14856 47.95684)
3     Storages_3  ...  POINT (12.58845 48.14799)
4     Storages_4  ...   POINT (8.64394 49.42888)
...          ...  ...                        ...
4318      N_4059  ...   POINT (1.84378 59.00563)
4319      N_4060  ...   POINT (2.20207 59.15696)
4320      N_4061  ...   POINT (3.06887 60.10174)
4321      N_4062  ...   POINT (3.01948 60.06188)
4322      N_4063  ...   POINT (2.33806 59.46650)
[4323 rows x 7 columns]

为了移除此限制,我通过 pd.DataFrame(gdf.copy())gdf 转换为 pandas df。 我使用 .copy(),因此我在 df 中所做的更改不会影响 gdf。但是我仍然无法更改 df'geometry' 列,即使它不是 geopandas df.

我也许可以将 geopandas df 转换为 dict,然后通过 .from_dict() 创建 pandas df。但是我不想这样做,因为这是不必要的转换。

我还能做什么?

几何类型的列是 geopandas(不管它怎么叫)在引擎盖下使用 GeometryArray,它允许您只保存几何对象或 None。

您可以将几何 dtype 的 GeometryArray 转换为 object dtype 的数组,它确实解除了这些限制,但不允许您访问几何操作。

as_object = df.geometry.astype(object)