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

CSV经纬度文件处理:编码异常与度分转十进制度求助

解决CSV中度分格式经纬度编码问题及转十进制方法

一、解决度数符号乱码问题

如果utf-8和latin1编码加载都无效,试试以下方法:

  • 优先尝试gbk或gb2312编码加载(很多中文环境生成的CSV会用这类编码):
import pandas as pd
df = pd.read_csv('你的文件路径.csv', encoding='gbk')
  • 若仍无效,用chardet库自动检测文件编码:
import chardet
with open('你的文件路径.csv', 'rb') as f:
    encoding_result = chardet.detect(f.read())
print(f"检测到的编码:{encoding_result['encoding']}")
# 用检测到的编码加载
df = pd.read_csv('你的文件路径.csv', encoding=encoding_result['encoding'])

二、度分格式转十进制度

加载文件后,编写转换函数处理经纬度:

def dms_to_decimal(dms_str):
    # 先替换可能残留的问号为度数符号(如果编码仍有小问题)
    cleaned_str = dms_str.replace('?', '°')
    # 提取方向(N/S/E/W)
    direction = cleaned_str[-1] if cleaned_str[-1] in ['N', 'S', 'E', 'W'] else None
    if direction:
        cleaned_str = cleaned_str[:-1]
    # 分割度和分
    degree, minute = cleaned_str.split('°')
    minute = minute.replace("'", "")
    # 计算十进制值
    decimal_val = float(degree) + float(minute)/60
    # 南纬(S)、西经(W)转为负数
    if direction in ['S', 'W']:
        decimal_val = -decimal_val
    return decimal_val

# 应用到DataFrame列
df['纬度_十进制'] = df['纬度'].apply(dms_to_decimal)
df['经度_十进制'] = df['经度'].apply(dms_to_decimal)

验证结果

转换完成后,可以通过打印前几行数据确认结果:

print(df[['纬度', '纬度_十进制', '经度', '经度_十进制']].head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:03