用pymap3d计算熊猫列的有效方法?

问题描述

我有一个带有地理坐标列的pandas数据框,并且我正在使用pymap3d将位置转换为其他坐标系。我实现的典型功能是:

def append_enu(df,observerlla):
e = []
n = []
u = []
for index,row in df.iterrows():
    tmpe,tmpn,tmpu = pm.geodetic2enu( row["lat_deg"],row["lon_deg"],row["alt_m"],*observerlla )
    e.append(tmpe)
    n.append(tmpn)
    u.append(tmpu)
df["enu_e_m"] = e
df["enu_n_m"] = n
df["enu_u_m"] = u
return df    

这可行,但是我发现它非常慢。 (我的表有超过700000行,并且我要为3个不同的坐标系添加转换。)是否有一种“更Python化”的方式来正确利用pandas允许数据框操作的方式?

解决方法

这是我想出的解决方案,它修改了原始的DataFrame而不是从函数中返回新的:

(df['enu_e_m'],df['enu_n_m'],df['enu_u_m']) = pm.geodetic2enu(df['lat_deg'],df['lon_deg'],df['alt_m'],*observerlla)

所以,是的,“它确实有效。”