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

如何将带方向标识的经纬度转换为float?现有Python代码结果错误

问题分析与修正方案

你的代码错误根源有两个:

  1. 正则表达式误用:你的数据是带方向前缀的十进制度数(比如W099.6569代表西经99.6569度),并非度分秒(DMS)格式,但你用了匹配度分秒的正则,导致提取不到有效分、秒数据,计算逻辑完全不适用。
  2. 未处理方向符号:南北纬、东西经的正负规则(N/E为正,S/W为负)完全没考虑,这是结果错误的核心原因。

正确处理代码

直接针对带方向的十进制度数做处理即可,不需要度分秒转换:

方法1:使用apply循环(直观易懂)

# 处理纬度:N开头为正,S开头为负
df['Latitude'] = df['Latitude'].apply(lambda x: float(x[1:]) if x.startswith('N') else -float(x[1:]))

# 处理经度:E开头为正,W开头为负
df['Longitude'] = df['Longitude'].apply(lambda x: float(x[1:]) if x.startswith('E') else -float(x[1:]))

方法2:矢量化操作(更高效,适合大数据集)

# 处理纬度
df['Latitude'] = df['Latitude'].str[1:].astype(float) * df['Latitude'].str[0].map({'N': 1, 'S': -1})

# 处理经度
df['Longitude'] = df['Longitude'].str[1:].astype(float) * df['Longitude'].str[0].map({'E': 1, 'W': -1})

验证结果

用你的示例数据测试,布隆方丹的行会被转换为:

CityLongitudeLatitude
布隆方丹26.216667-29.116667

完全符合你给出的目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:10:33