Pandas - 在计算中跳过 NULL 值

Pandas - skip NULL value in calculation

我需要将字段添加到我的 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: ('Point coordinates must be finite. (nan, nan, 0.0) has been passed as coordinates.', u'occurred at index 2881')

如何保证大圆距离公式不会得到NULL值(没有坐标时会跳过距离计算)?我知道 pd.notnull() 函数,但它 returns TrueFalse.

我假设您的函数 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()