将几何列转换为 Geodataframe 中的 lat/long 列

Turn geometry column into lat/long columns in Geodataframe

我有一个带有 'geometry' 列的地理数据框,其中我有点几何图形,例如点 (-0.01334 51.52883)。我需要提取纬度和经度并将其添加为数据框中的新列。

我尝试使用

df['lon'] = df['geometry'].x
df['lat'] = df['geometry'].y

但它给了我一个 SettingWithCopyWarning,我不确定为什么。有人可以帮忙吗?谢谢!

考虑到这些值是采用描述格式的字符串 (lat lon) 您可以先替换括号以便更好地查看。

  1. df["geo"] = df["geo"].str.replace(r"[\(\)", "")

之后,您可以通过中间的space字符拆分并扩展列。 str.split doc

  1. df = df["geo"].str.split(" ", expand=True)

您最终会得到两列 0 和 1,之后只需重命名它们即可。

问题不在于发布的代码 - 根据 martinfleis 的评论,问题在于在 运行 此代码之前多次切片原始数据帧。我通过从原始数据框中删除不需要的行而不是切片来避免 SettingWithCopyWarning。

您可以像这样尝试直接将 lan/lon 提取应用于 df:

df['lon'] = df.geometry.apply(lambda p: p.x)
df['lat'] = df.geometry.apply(lambda p: p.y)

我这样做没有问题:

df['lon'] = df['geometry'].x
df['lat'] = df['geometry'].y

并选择了创建的两列:

df = df[['lon','lat']]
df.dropna()