如何按数位拆分GPS坐标整数字段 批量转换度分格式处理CSV文件
解决方案
你可以用pandas做批量处理,核心逻辑是通过字符串切片拆分度和分,单文件处理仅需几行代码,1万+文件可以加个遍历逻辑批量跑完。
核心处理逻辑
度分格式的原始值「分」的整数部分固定为2位(00~59),所以只需要把数值转成字符串后,从整数部分倒数第2位切开即可,无需硬编码切分位置,适配2位纬度、3位经度的通用场景:
- 原始值转字符串后拆分整数、小数部分
- 整数部分从倒数第2位切开,前半部分为度
- 整数部分后2位拼接原有小数部分为分
- 最后拼接方位标识即可
代码示例
import pandas as pd import os # 单字段转换函数:输入原始值、方位标识,返回目标格式字符串 def ddm_convert(raw_val, direction): val_str = str(raw_val) # 拆分整数和小数部分 if '.' in val_str: int_part, float_part = val_str.split('.', 1) else: int_part = val_str float_part = '0' # 切分度和分:分的整数部分固定2位 degree_part = int_part[:-2] minute_part = int_part[-2:] + '.' + float_part return f"{degree_part} {minute_part} {direction}" # 批量处理CSV文件夹 csv_folder = "你的CSV文件夹路径" output_folder = "处理后输出路径" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(csv_folder): if not filename.lower().endswith('.csv'): continue file_path = os.path.join(csv_folder, filename) df = pd.read_csv(file_path, header=None) # CSV无表头的话保留header=None参数 # 处理第0列(纬度,默认方位N,可根据实际数据调整) df['纬度_转换后'] = df.iloc[:, 0].apply(lambda x: ddm_convert(x, 'N')) # 处理第2列(经度,默认方位E,可根据实际数据调整) df['经度_转换后'] = df.iloc[:, 2].apply(lambda x: ddm_convert(x, 'E')) # 保存处理后的文件 output_path = os.path.join(output_folder, filename) df.to_csv(output_path, index=False, encoding='utf-8-sig')
可选调整项
- 如果需要单独拆成度、分、方位三列,只要修改
ddm_convert函数返回对应三个值,调用apply时加result_type='expand'就能直接生成三列插入原表 - 如果存在南纬、西经的场景,可以自行加逻辑判断方向标识,或者从其他字段读取方位值传入函数
内容的提问来源于stack exchange,提问作者EWbiology
相关产品推荐
相关产品推荐

