首页 > 解决方案 > 在 arcsin [RuntimeWarning] 中遇到无效值

问题描述

我有一个大数据大小的文件,我想用给定的纬度和经度值计算距离。但是,我仅在某些输入文件中遇到以下问题。

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]

以下是我用于上述代码的 hasrsine 函数。

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))

如下显示不起作用的示例数据。 样本数据

标签: pythonexcelpandas

解决方案


推荐阅读