pandas 最近邻- sklearn获取纬度和经度

dojqjjoe  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(170)

我有一组名字,经度和纬度坐标,我试图运行一个nearesat邻居搜索。

name        lat        long
            0   Veronica Session  11.463798   14.136215
            1      Lynne Donahoo  44.405370  -82.350737
            2      Debbie Hanley  14.928905  -91.344523
            3     Lisandra Earls  68.951464 -138.976699
            4         Sybil Leef  -1.678356   33.959323

当前我正在使用sklearn.neighbors对数据运行搜索,但收到类型错误。数据存储在 Dataframe 中。
TypeError: NearestNeighbors.__init__() takes 1 positional argument but 2 positional arguments (and 2 keyword-only arguments) were given
另外,我需要最终结果保留原始名称沿着它们的新坐标顺序,我认为我目前的代码做不到这一点。我一直在使用sklearn documentation,但遇到了一点困难。请帮助我。

coords = list(zip(df['lat'],df['long']))
btree = sklearn.neighbors.NearestNeighbors(coords,algorithm='ball_tree',metric='haversine')
btree.fit(coords)

df['optimised_route']=btree

我有一个单独的循环计算半正矢距离手动这可以带来如果需要。

k97glaaz

k97glaaz1#

指出coords不应作为参数传递给NearestNeighbors的注解是正确的。相反,latlong参数应作为.fit()方法中的列传递:

from io import StringIO
from sklearn.neighbors import NearestNeighbors
import pandas as pd

lat_long_file = StringIO("""name,lat,long
Veronica Session,11.463798,14.136215
Lynne Donahoo,44.405370,-82.350737
Debbie Hanley,14.928905,-91.344523
Lisandra Earls,68.951464,-138.976699
Sybil Leef,-1.678356,33.959323
""")

df = pd.read_csv(lat_long_file)

nn = NearestNeighbors(metric="haversine")
nn.fit(df[["lat", "long"]])

现在,我们可以在11.5,15.1中查询NearestNeighbors对象的索引。例如:使用它来计算两个最接近的邻居,并在原始 Dataframe 中查找结果索引nearest[0]

new_example = pd.DataFrame({"lat": [11.5], "long": [15.1]})

nearest = nn.kneighbors(new_example, n_neighbors=2, return_distance=False)

print(df.iloc[nearest[0]])

这表明两个最近的点分别位于11.46,14.13-1.6,33.9

name        lat       long
0  Veronica Session  11.463798  14.136215
4        Sybil Leef  -1.678356  33.959323

相关问题