【问题标题】:Turn geometry column into lat/long columns in Geodataframe将几何列转换为地理数据框中的纬度/经度列
【发布时间】:2020-03-30 01:01:22
【问题描述】:

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

我尝试过使用

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

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

【问题讨论】:

  • 这段代码没问题,在导致警告之前有一些代码,因为您可能正在使用原始 df 的切片或其他东西。
  • 谢谢!我以前从未收到过警告,所以不确定它是如何发生的或为什么会发生 - 有没有一种直接的方法可以查看代码的哪一部分可能导致它?我不得不使用 df[df['column']=='value'] 从原始数据框中过滤掉一些行
  • 好的,所以我设法通过删除我不想要的行来绕过它,而不是从我想要保留的行中截取一部分。代码现在可以工作了。感谢您引导我专注于此!

标签: python geopandas shapely


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我这样做了,没有问题:

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

      并选择了创建的两列:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        你最终会得到两列 0 和 1,只需要在那之后重命名它们。

        【讨论】:

        • "geometry" 列包含 shapely.geometry.Point,而不是字符串。
        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 2014-05-01
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多