如何整理pyproj坐标转换后的数组以适配Pandas保存?
解决坐标转换后数组规整化的问题
核心思路
要让Pandas能直接把数组转成可保存的Excel,数组的每个元素必须是包含所有字段的统一长度元组/列表(比如每个元素对应一行数据:转换后X、转换后Y、原纬度、原经度),而不是混合元组和单独数值的混乱结构。
方法一:生成数组时直接规整(推荐)
在遍历转换坐标的过程中,直接把转换后的坐标和原坐标打包成一个完整元组,避免后续整理的麻烦:
from pyproj import Transformer import pandas as pd # 初始化转换器(注意always_xy=True时,转换参数是先经度后纬度) transformer = Transformer.from_crs("EPSG:4326", "EPSG:25832", always_xy=True) # 假设你的原坐标列表格式:[(原纬度1, 原经度1), (原纬度2, 原经度2), ...] original_coords = [(39.9, 116.3), (31.2, 121.5)] # 生成规整数组 xy_arr = [] for lat, lon in original_coords: # 执行坐标转换 x, y = transformer.transform(lon, lat) # 将转换结果与原坐标合并成一个元组,加入数组 xy_arr.append((x, y, lat, lon)) # 直接转DataFrame并保存 df = pd.DataFrame(xy_arr, columns=["转换后X", "转换后Y", "原纬度", "原经度"]) df.to_excel("坐标转换结果.xlsx", index=False)
方法二:修正已生成的格式错误数组
如果已经得到了混合结构的数组(比如[(转换坐标元组), 原纬度, 原经度,...]),可以通过分组拆分的方式修正:
import pandas as pd # 假设你现有的格式错误数组是bad_arr bad_arr = [(448282.5, 4426113.3), 39.9, 116.3, (352763.8, 3453396.2), 31.2, 121.5] fixed_arr = [] # 每3个元素为一组,拆分重组 for i in range(0, len(bad_arr), 3): trans_x, trans_y = bad_arr[i] orig_lat = bad_arr[i+1] orig_lon = bad_arr[i+2] fixed_arr.append((trans_x, trans_y, orig_lat, orig_lon)) # 转DataFrame保存 df = pd.DataFrame(fixed_arr, columns=["转换后X", "转换后Y", "原纬度", "原经度"]) df.to_excel("修正后坐标结果.xlsx", index=False)
为什么原来的格式无法直接保存?
Pandas创建DataFrame时,要求数组的每个元素是长度一致的序列(元组/列表),每个序列对应一行数据。你之前的数组混合了元组和单独数值,导致DataFrame无法识别统一的列结构,自然无法生成规整的表格。
内容的提问来源于stack exchange,提问作者duxt3r__
相关产品推荐
相关产品推荐

