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

如何在Python Pandas中用apply处理两列实现ITM转WGS-84坐标

解决Pandas两列坐标转换为WGS84的问题

核心方案:利用pyproj批量转换或逐行处理

首先明确ITM坐标系的EPSG代码是2039,WGS84是4326。pyproj的Transformer支持批量处理整列数据(效率更高),也可以通过apply(axis=1)逐行处理,两种方法都能解决你的问题。


步骤1:导入依赖并创建转换器

import pandas as pd
from pyproj import Transformer

# 初始化ITM转WGS84的转换器,always_xy=True确保坐标顺序匹配CRS定义
transformer = Transformer.from_crs("EPSG:2039", "EPSG:4326", always_xy=True)

步骤2:处理数据集

假设你的数据集是df,包含x(ITM东向坐标)和y(ITM北向坐标)列。

方法一:矢量化批量转换(推荐,大数据集高效)

直接将整列数据传入转换器,无需逐行循环:

# 批量转换,返回经度(lon)、纬度(lat)
lon, lat = transformer.transform(df['x'].values, df['y'].values)

# 将结果添加到原数据框,按你的需求命名列
df['X'] = lat  # 对应示例中的33.04647(纬度)
df['Y'] = lon  # 对应示例中的35.56525(经度)

方法二:逐行apply处理(适合小数据集)

如果你需要自定义逻辑,可以用apply(axis=1)逐行传入x、y值:

def convert_row(row):
    # 转换当前行的x、y坐标
    lon, lat = transformer.transform(row['x'], row['y'])
    # 返回Series,对应新列的取值
    return pd.Series([lat, lon], index=['X', 'Y'])

# 应用函数并合并结果到原数据框
df[['X', 'Y']] = df.apply(convert_row, axis=1)

关键说明

  • always_xy=True必须设置:ITM的x/y对应东/北向,WGS84的坐标顺序是经度(lon)/纬度(lat),该参数确保转换器使用正确的坐标映射。
  • 你之前直接用apply失败的原因:默认apply是按列处理,函数会收到整列数据而非单行的x、y值,指定axis=1后才会按行传递数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:31:36