#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)
Итак, да, «это просто работает».