【发布时间】:2020-10-05 04:02:03
【问题描述】:
我有以下数据框:
SGCODE X Y
0 T0IQ00000000017200015 27.687276 -26.001460
1 T0IQ00000000017200022 27.699453 -26.003298
2 T0IQ00000000017800128 27.753478 -26.047500
使用用户定义的函数:
def haversine_distance(lat1, lon1, lat2, lon2, rlim):
r = 6371
phi1 = np.radians(lat1)
phi2 = np.radians(lat2)
delta_phi = np.radians(lat2 - lat1)
delta_lambda = np.radians(lon2 - lon1)
a = np.sin(delta_phi / 2)**2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2)**2
res = r * (2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)))
if rlim >= res:
return np.round(res, 2)
当我尝试在 df 上使用 if 语句运行该函数时,我收到以下错误。当我删除 if 语句时,它工作正常并且我得到了输出,我是否遗漏了 if 语句语法中的一些明显内容?
distances_km = []
for row in sample_unq_sg_codes_latlong.itertuples(index=False):
distances_km.append(
haversine_distance(sample_unq_sg_codes_latlong["X"], sample_unq_sg_codes_latlong["Y"], row.X, row.Y,5)
)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
但是,当我运行该函数的单次迭代时,它会起作用:
haversine_distance(27.687276, -26.001460, 27.699453, -26.003298,5)
1.37
【问题讨论】:
标签: python pandas function if-statement valueerror