【问题标题】:Converting a geopandas geodataframe into a pandas dataframe将 geopandas 地理数据框转换为 pandas 数据框
【发布时间】:2018-09-05 09:22:06
【问题描述】:

将 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] )

【问题讨论】:

    标签: python pandas geopandas


    【解决方案1】:

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

    df1 = pd.DataFrame(gdf)
    

    以上将保留“几何”列,将其作为普通数据帧没有问题。但如果您真的想删除该列,您可以这样做(假设该列称为“几何”):

    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)

    【讨论】:

    • 谢谢,很有帮助。注意 - 带有 columns 关键字的 gdf.drop(columns='geometry') 仅适用于相对较新的 pandas 版本 0.21。它不适合我,也可能不适合其他人。
    • 是的,这是真的。替代方案是gdf.drop('geometry', axis=1),将添加。
    • 一个重要说明(至少适用于 pandas 1.0.5):如果您仅使用 pd.DataFrame(geopandas_df) 构建新数据框,则不能保证新 pandas df 中的系列不会是 geopandas 。大批。在调用 pandas 方法时,这可能会导致多个方法未实现错误。
    • @ИванСудос 这是否意味着将地理数据框转换为 numpy 数组是进行转换的最安全方法(例如,使用原始问题中的代码)?或者您有更好的选择吗?
    • @jberrio 好吧,我主要通过结构化代码来解决这个问题,这样我就可以避免在 geopandas 上进行非平凡的 pandas 操作,并发现它是最好的方法。但是如果真的需要它,我同意你并建议 .to_numpy() 方法,因为它不会复制任何东西,除非指定参数复制。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2020-06-17
    • 2019-05-14
    • 2014-08-19
    • 2019-07-01
    • 2021-12-13
    • 2018-05-29
    • 2020-07-28
    相关资源
    最近更新 更多