我有一个很大的数据文件,我想用给定的纬度和经度值计算距离。但是,仅某些输入文件会遇到以下问题。
RuntimeWarning: invalid value encountered in arcsin
return earth_radius *2 * np.arcsin(np.sqrt(a))
如果将以下代码行添加到程序中,则可以解决该问题。但是,我不希望在 Drive Mode 中删除包含null的数据。我该怎么做才能克服这种问题?
distdura = distdura.replace(0, np.nan)
distdura = distdura[distdura['Drive Mode'].notnull()]
以下显示了我的程序。
distdura = pd.read_csv(folderdir)
distdura = distdura.sort_values(by = ['AV_ID','timestamp'])
distdura['dist'] = np.concatenate(distdura.groupby(["AV_ID"]).apply(lambda x:haversine(x['Latitude'],x['Longitude'],x['Latitude'].shift(),x['Longitude'].shift())).values)
distdura = distdura[distdura["dist"] < 1]
distdura = distdura[distdura["dist"] > -0.99]
以下是我在上面的代码中使用的Haversine函数。
def haversine(lat1, lon1, lat2, lon2, to_radians = True, earth_radius = 6371):
if to_radians:
lat1,lon1,lat2,lon2 = np.radians([lat1,lon1,lat2,lon2])
a = np.sin((lat2-lat1)/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2
return earth_radius *2 * np.arcsin(np.sqrt(a))