将 geopandas 地理数据框转换为 pandas 数据框

Converting a geopandas geodataframe into a pandas dataframe

将 geopandas 地理数据框转换为 pandas 数据框的最有效方法是什么?以下是我使用的方法,是否有另一种方法更有效或通常不会产生错误?

import geopandas as gpd
import pandas as pd

# assuming I have a shapefile named shp1.shp
gdf1 = gpd.read_file('shp1.shp')

# then for the conversion, I drop the last column (geometry) and specify the column names for the new df
df1 = pd.DataFrame(gdf1.iloc[:,:-1].values, columns = list(gdf1.columns.values)[:-1] )

您不需要将 GeoDataFrame 转换为值数组,您可以将其直接传递给 DataFrame 构造函数:

df1 = pd.DataFrame(gdf)

以上将保留 'geometry' 列,将其作为普通 DataFrame 没有问题。但是如果你真的想删除该列,你可以这样做(假设该列被称为 'geometry'):

df1 = pd.DataFrame(gdf.drop(columns='geometry'))
# for older versions of pandas (< 0.21), the drop part: gdf.drop('geometry', axis=1)

两个注意事项:

  • 通常不需要将 GeoDataFrame 转换为普通 DataFrame,因为您从 DataFrame 了解的大多数方法都可以正常工作。当然,也有一些情况是确实需要的(比如绘制没有几何图形的数据),那么上面的方法就是最好的方法。
  • 第一种方式(df1 = pd.DataFrame(gdf))不会复制GeoDataFrame中的数据。从效率的角度来看,这通常会很好,但是根据您要对 DataFrame 执行的操作,您可能需要一个实际的副本:df1 = pd.DataFrame(gdf, copy=True)