web-dev-qa-db-ja.com

geopandas geodataframeをpandas dataframeに変換する

Geopandas geodataframeをpandas dataframeに変換する最も効率的な方法は何ですか?以下は私が使用する方法ですが、エラーを生成しない場合に、より効率的またはより一般的な別の方法はありますか?

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] )
14
jberrio

GeoDataFrameを値の配列に変換する必要はありません。それを直接DataFrameコンストラクターに渡すことができます。

_df1 = pd.DataFrame(gdf)
_

上記は 'geometry'列を保持しますが、これは通常のDataFrameとして問題ありません。しかし、実際にその列を削除したい場合は、次のようにできます(列が「ジオメトリ」と呼ばれていると仮定)。

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

2つのメモ:

  • 多くの場合、GeoDataFrameを通常のDataFrameに変換する必要はありません。これは、DataFrameから知っているほとんどのメソッドが同様に機能するためです。もちろん、それが本当に必要な場合がいくつかあります(たとえば、ジオメトリなしでデータをプロットする場合など)。上記の方法が最善の方法です。
  • 最初の方法(df1 = pd.DataFrame(gdf))は、GeoDataFrame内のデータのコピーを取得しません。これは多くの場合、効率の観点からは適切ですが、DataFrameで何をしたいかによっては、実際のコピーが必要になる場合があります。df1 = pd.DataFrame(gdf, copy=True)
14
joris