我需要将字段添加到我的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()
函数,但是它返回True
或False
。
答案 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()