You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Geopandas DataFrame的Shapely Point列提取经纬度?

高效提取Shapely Point的经纬度到GeoDataFrame列

嘿,这个需求我经常遇到!其实你不用写自定义函数遍历,GeoPandas+Shapely本身就有非常高效优雅的解决方案,比你想的简单多了~

最推荐的矢量化方法(性能最优)

如果你的DataFrame里有一列(比如叫point_object)存储的是Shapely Point对象,直接通过属性访问就能批量提取经纬度,这是矢量化操作,底层由C实现,比Python级别的循环/apply快得多,代码也超简洁:

# 提取经度(x坐标)
df['longitude'] = df['point_object'].x
# 提取纬度(y坐标)
df['latitude'] = df['point_object'].y

如果你的Point列是GeoDataFrame的默认geometry列(也就是创建GeoDataFrame时指定的空间列),写法更省事:

df['longitude'] = df.geometry.x
df['latitude'] = df.geometry.y

备选:一次性拆分经纬度列

如果你想一次性把经纬度拆分成两列,也可以用pd.DataFrame构造器配合apply,不过性能不如上面的矢量化方法,适合小数据集或者需要一次性处理的场景:

df[['longitude', 'latitude']] = pd.DataFrame(
    df['point_object'].apply(lambda p: (p.x, p.y)).tolist(),
    index=df.index
)

为什么推荐第一种方法?因为矢量化操作避开了Python循环的开销,当你的DataFrame有几万甚至几十万行时,性能差距会非常明显,而且代码可读性拉满,完全符合你想要的“高效优雅”的要求~

内容的提问来源于stack exchange,提问作者jtam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:18:07