在 pandas 和 geopandas 之间转换而不保留 'geometry' 列限制
Converting between pandas and geopandas without preserving 'geometry' column restrictions
我有一个 geopandas
df,它有 'geometry'
列。显然 'geometry'
列是 geopandas
dfs 中的一个特殊列。我可以将 BaseGeometry
或 None
值添加到 '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)
我有一个 geopandas
df,它有 'geometry'
列。显然 'geometry'
列是 geopandas
dfs 中的一个特殊列。我可以将 BaseGeometry
或 None
值添加到 '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)