熊猫-在计算中跳过NULL值

时间:2018-12-17 20:58:54

标签: python pandas null

我需要将字段添加到我的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'发生在索引2881')

如何确保大圆距离的公式不会收到NULL值(如果没有可用的坐标,距离计算将被跳过)?我知道pd.notnull()函数,但是它返回TrueFalse

1 个答案:

答案 0 :(得分:3)

我认为您的函数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()