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

在Python Pandas中使用pyproj转换经纬度时语法错误求助

问题解决

语法错误原因

你的lambda表达式使用三元运算符时仅写了if分支,缺少else分支。apply要求每一行必须返回对应值,当row.epsg == 4326时当前代码无返回内容,触发语法错误。

额外逻辑问题

调用转换函数时参数顺序错误:transfform_lat_long中设置了always_xy=True,意味着proj.transform需要先传入经度(x)、再传入纬度(y),但你当前传的是row.latitude(纬度)和row.longitude(经度),顺序颠倒会导致转换结果完全错误。

修正后的代码

完整可运行代码

import pandas as pd
import pyproj

df = pd.DataFrame(
    {
     'epsg': [4326, 4326, 4326, 4203, 7844],
     'latitude': [-34.58, -22.78, -33.45, -33.60, -30.48],
     'longitude': [122.31, 120.2, 118.55, 140.77, 115.88]})

def transfform_lat_long(inproj:int, outproj:int, x1, y1):
    proj = pyproj.Transformer.from_crs(inproj, outproj, always_xy=True)
    x2, y2 = proj.transform(x1, y1)
    return outproj, y2, x2  # 对应epsg、纬度、经度的返回顺序

# 应用函数到DataFrame
df[['epsg','latitude', 'longitude']] = df.apply(lambda row:
    transfform_lat_long(row.epsg, 4326, row.longitude, row.latitude)  # 交换经度和纬度的传入顺序
    if row.epsg != 4326 
    else (row.epsg, row.latitude, row.longitude),  # else分支返回原数据
    axis=1
)

print(df)

关键修正点

  • 补充三元运算符的else分支,当epsg为4326时直接返回原行的epsg、纬度、经度值,确保每一行都有返回内容。
  • 调用转换函数时,将row.longitude(经度,x轴)放在前面,row.latitude(纬度,y轴)放在后面,符合always_xy=True的参数要求。
  • 调整函数返回值顺序为(outproj, y2, x2),匹配DataFrame的epsg、latitude、longitude列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:33:08