从Pandas中的CSV坐标生成Shapely多边形

afdcj2ne  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(183)

所以我读了一个带有pandas的.csv文件。我希望读取一个特定的行和列,有一个多边形的坐标可用。它看起来像这个"(-117.878472193291,33.9258862905858),(-117.959630976464,33.9287353414733),(-117.988036550575,33.8445186678524),(-117.871292762472,33.8478889307759)"
现在我想把它转换成一个实际的多边形,我可以使用Shapely。
我的代码看起来像这样:

df = pd.read_csv(thecsv.csv)

print(df['coodinates'].iloc[:1])
display: 0    (-117.878472193291,33.9258862905858),(-117.959...

我尝试将其转换为多边形:

poly = Polygon(df['coordinates'].iloc[:1])

现在我得到了这个错误:
ValueError:LinearRing必须至少有3个坐标元组
有什么建议吗?我说的对吗?谢谢!

lx0bsm1f

lx0bsm1f1#

你的坐标似乎是在一个Python的文字一样的语法。你可以在将它传递给Polygon之前使用ast.literal_eval解析它:

import ast
import pandas as pd
from shapely.geometry import Polygon

df = pd.read_csv("a.csv")

df["coordinates"] = df["coordinates"].apply(lambda c: Polygon(ast.literal_eval(c)))

print(df)

a.csv:

coordinates
"(-117.878472193291,33.9258862905858),(-117.959630976464,33.9287353414733),(-117.988036550575,33.8445186678524),(-117.871292762472,33.8478889307759)"

输出:

coordinates
0  POLYGON ((-117.878472193291 33.9258862905858, ...

相关问题