Панды - пропустить значение NULL в расчете - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно добавить поле в мой DataFrame с вычисленным расстоянием между местоположением A и местоположением B. У меня есть этот код, который отлично работает для полей с непустыми координатами:

df['Distance_AB'] = df.apply(lambda x: great_circle((x['latitude_A'],x['longitude_A']), (x['latitude_B'], x['longitude_B'])).meters, axis=1).round()

Но когда он встречает пустое полевыдает ошибку:

ValueError: ('Координаты точки должны быть конечными. (nan, nan, 0.0) были переданы как координаты.', u'coccurned по индексу 2881 ')

Как можно гарантировать, что формула для расстояния по большому кругу не получит значение NULL (расчет расстояния будет пропущен, если координаты недоступны)?Мне известна функция pd.notnull(), но она возвращает True или False.

1 Ответ

0 голосов
/ 18 декабря 2018

Я полагаю, либо ваша функция great_circle не векторизована, либо векторизация выходит за рамки вашего вопроса.Поскольку pd.DataFrame.apply уже является циклом уровня Python, вы можете использовать явную функцию с try / except без значительных дополнительных затрат:

def calculator(row):
    lat_A, long_A = row['latitude_A'], row['longitude_A']
    lat_B, long_B = row['latitude_B'], row['longitude_B']
    try:
        return great_circle((lat_A, long_A), (lat_B, long_B)).meters
    except ValueError:
        return np.nan

df['Distance_AB'] = df.apply(calculator, axis=1).round()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...