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
相关产品推荐
相关产品推荐

