我需要将字段添加到我的数据框架中,并在位置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) 被作为坐标传递。',在索引2881')
如何确保Great Circle距离的公式不会收到无效的值(如果没有可用的坐标,将跳过距离计算)?我知道pd.notnull()
功能,但它返回True
或False
。
我假设您的函数 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()