【问题标题】:Geopandas: how to read a csv and convert to a geopandas dataframe with polygons?Geopandas:如何读取 csv 并转换为带有多边形的 geopandas 数据框?
【发布时间】:2020-07-22 04:11:10
【问题描述】:

我将.csv 文件作为数据框读取,如下所示:

import pandas as pd
df = pd.read_csv('myFile.csv')
df.head()
    BoroName    geometry
0   Brooklyn    MULTIPOLYGON (((-73.97604935657381 40.63127590...
1   Queens      MULTIPOLYGON (((-73.80379022888098 40.77561011...
2   Queens      MULTIPOLYGON (((-73.8610972440186 40.763664477...
3   Queens      MULTIPOLYGON (((-73.75725671509139 40.71813860...
4   Manhattan   MULTIPOLYGON (((-73.94607828674226 40.82126321...

我想将其转换为 geopandas 数据框。

import geopandas as gpd
crs = {'init': 'epsg:4326'}
gdf = gpd.GeoDataFrame(df, crs=crs).set_geometry('geometry')

但我收到以下错误

TypeError: Input must be valid geometry objects: MULTIPOLYGON (((-73.97604935657381 40.631275905646774, -73.97716511994669 40.63074665412933,....

【问题讨论】:

    标签: python pandas geopandas


    【解决方案1】:

    由于某种原因,geopandas 似乎无法从 pandas 数据框中转换几何列。您可以尝试两种方法。

    数字 1:尝试使用 geopandas 直接加载 csv

    gdf = gpd.read_file('myFile.csv')
    gdf.crs = 'epsg:4326'
    

    第 2 点:在将数据框转换为地理数据框之前,尝试在列上应用 shapely wkt.loads 函数。

    from shapely import wkt
    
    df['geometry'] = df['geometry'].apply(wkt.loads)
    gdf = gpd.GeoDataFrame(df, crs='epsg:4326')
    

    任何一种方式都应该有效。祝你好运!

    【讨论】:

    • 2 号对我有用。数字 1 出于某种原因杀死了我的 jupyter-notebook 内核
    • 1 号也使 Spyder 内核崩溃
    • 2 号效果很好
    【解决方案2】:

    你也可以试试这个:

    gdf = gpd.GeoDataFrame(
        df, geometry=gpd.points_from_xy(df.latitude, df.longitude))
    

    这会将那些纬度/经度列转换为点

    【讨论】:

    • 但是在显示的数据框中,纬度和经度列在哪里?
    • points_from_xy使用几何坐标时的正确顺序是points_from_xy(longitudes, latitudes)
    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2021-04-01
    • 2021-03-21
    • 2021-07-20
    相关资源
    最近更新 更多