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

如何在Python中批量将混合DMS/DD的经纬度列转为DD格式?

统一航空事故数据集经纬度为十进制度(DD)格式的解决方案

前提假设

你使用Pandas处理数据集,以下代码基于Python环境,需提前安装pandas和numpy。


1. 读取数据集

首先导入依赖并加载数据:

import pandas as pd
import numpy as np

# 替换为你的数据集路径/文件名
df = pd.read_csv('aviation_data.csv')

2. 编写格式转换函数

针对混合的DD/DMS格式,先判断每行数据的格式,再做对应转换:

def dms_to_dd(dms_str):
    # 处理空值或非字符串输入
    if pd.isna(dms_str) or not isinstance(dms_str, str):
        return np.nan
    
    # 提取方向标识(N/S/E/W)
    direction = dms_str[-1].upper()
    # 剥离方向和前导零,保留纯数字部分
    num_segment = dms_str[:-1].lstrip('0')
    
    try:
        # 纬度(N/S)格式:度(2位) + 分(2位) + 秒(2位)
        if direction in ('N', 'S'):
            if len(num_segment) != 6:
                return np.nan
            degrees = int(num_segment[:2])
            minutes = int(num_segment[2:4])
            seconds = int(num_segment[4:6])
        # 经度(E/W)格式:度(3位) + 分(2位) + 秒(2位)
        elif direction in ('E', 'W'):
            if len(num_segment) != 7:
                return np.nan
            degrees = int(num_segment[:3])
            minutes = int(num_segment[3:5])
            seconds = int(num_segment[5:7])
        else:
            return np.nan
        
        # 计算十进制度值
        dd_value = degrees + minutes/60 + seconds/3600
        # 根据方向添加正负号(S/W为负)
        if direction in ('S', 'W'):
            dd_value *= -1
        
        return dd_value
    # 捕获格式异常,返回空值
    except Exception:
        return np.nan

def normalize_coordinate(value):
    # 判断是否为DMS格式(含方向标识)
    if isinstance(value, str) and value[-1].upper() in ('N', 'S', 'E', 'W'):
        return dms_to_dd(value)
    else:
        # 尝试直接转换为DD格式浮点数
        try:
            return float(value)
        except Exception:
            return np.nan

3. 批量转换整列

将函数应用到纬度和经度列,生成新的标准化列:

# 处理纬度列
df['Latitude_DD'] = df['Latitude'].apply(normalize_coordinate)
# 处理经度列
df['Longitude_DD'] = df['Longitude'].apply(normalize_coordinate)

4. 验证转换结果

查看前10行数据确认转换是否正确:

print(df[['Latitude', 'Latitude_DD', 'Longitude', 'Longitude_DD']].head(10))

适配说明

  • 如果你的DMS格式存在变种(比如数字与方向间有空格、分秒用小数点分隔等),可以修改dms_to_dd函数的字符串处理逻辑。
  • 转换后出现的空值对应原数据的无效格式,可根据需求删除或填充。
  • 完成转换后,即可使用folium基于Latitude_DD和Longitude_DD列绘制地图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:04:56