【问题标题】:Pandas Latitude-Longitude: Calculate the distance between two points and select the nearest onePandas经纬度:计算两点之间的距离并选择最近的一个
【发布时间】:2021-05-08 20:28:50
【问题描述】:

我有一个包含 15k 行的数据框,其中包含坐标和位置名称(主要是企业)

spot lat1 l1 place lat2 lon2
1 41,1808128356934 -8,53291034698486 A 41.146749 -8.613889
1 41,1808128356934 -8,53291034698486 B 41.146105 -8.609868
2 41,1491432189941 -8,61034202575684 A 41.146749 -8.613889
2 41,1491432189941 -8,61034202575684 B 41.146105 -8.609868

我一直在尝试在两个坐标之间进行减法以找到距离(以米为单位),然后仅选择它们之间距离较小的地点和地点。

这是我尝试使用的代码:

df['X_diff'] = df['lon1'] - df['lon2']
df['Y_diff'] = df['lat1'] - df['lat2']
df['dist'] = np.linalg.norm(df[['X_diff', 'Y_diff']], axis=1)

我也意识到坐标的类型是不同的。

spot     object
lat1     object
lon1     object
place    object
lat2     float64
lon2     float64
dtype: object

如何找到距离并只选择最近的?

【问题讨论】:

  • 你可以使用haversine公式,以防距离太大,地球曲率进入画面。
  • 感谢您的建议。我读过它并且能够做到。

标签: python pandas dataframe coordinates distance


【解决方案1】:

您的 lat1lon1 是字符串。也许您想在计算范数之前将, 替换为. 并转换为浮点数:

df[['lat1', 'lon1']] = df[['lat1','lon1']].apply(lambda x: pd.to_numeric(x.str.replace(',','.')) )

【讨论】:

  • 谢谢。我刚刚尝试并遇到错误ValueError: Given date string not likely a datetime. 不知道为什么它假设是日期时间?!
  • @LuisFerreira 我的错,应该是pd.to_numeric。不知道我把pd.to_datetime :D
  • 我很遗憾没有检查:D 再次感谢您:D
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 2018-06-11
  • 2011-04-11
  • 2010-09-06
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多