Эффективный способ вычисления столбцов pandas с помощью pymap3d?

#python #pandas #geo

#python #pandas #гео

Вопрос:

У меня есть фрейм данных 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 разных систем координат.) Существует ли «более питонический» способ сделать это, который должным образом использует преимущества того, как pandas позволяет манипулировать фреймами данных?

Комментарии:

1. Похоже, что трансляция может быть тем, что вы ищете. Он может быстро применить функцию к столбцу или строке любого массива numpy / pandas

Ответ №1:

Вот решение, которое я придумал, которое изменяет исходный фрейм данных вместо возврата нового из функции:

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

Итак, да, «это просто работает».