Geopandas:如何读取CSV并将其转换为带有多边形的Geopandas数据框?

32

我将一个 .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 dataframe。

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,....
4个回答

37

Geopandas似乎无法将pandas数据框中的几何列进行转换。

解决方案2

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

from shapely import wkt

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

祝你好运!


不要使用-对于某些人来说会导致Spyder和Jupyter内核崩溃

解决方案1:尝试直接使用geopandas加载csv文件

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

4
第二个选项适合我。第一个选项由于某种原因导致我的Jupyter笔记本内核崩溃。 - Sam Murphy
1
数字1也会导致Spyder内核崩溃。 - Stelios K.
数字2运行良好。 - eeny

29

您也可以尝试这个:

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

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


1
但是在呈现的数据框中,纬度和经度列位于哪里? - shadow_dev
1
使用 points_from_xy 函数时,正确的顺序是 points_from_xy(longitudes, latitudes) - mins

1

0

如果你直接加载Geopandas,它会把几何列放在最后。我通过尝试不同的列名发现这一点,并且它有效了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接