我有一个包含3列的数据框(称为坐标):索引,纬度,经度 - 它有大约1,000行 . 我有一个特定地点的坐标,想要找到地点和数据框中所有坐标之间的距离 . 目前,我可以使用geopy.distance来查找两个特定坐标之间的距离 . 例如 .
import geopy.distance
site_coords = (38.898556, -77.037852)
place2_coords = (38.897147, -77.043934)
print(geopy.distance.vincenty(site_coords, place2_coords).km)
上面的代码给出了0.5503161689006362(我已经检查过,这是正确的)
我的问题是循环数据框(称为坐标)并计算该数据框中所有坐标的距离 . 目前,这就是我所拥有的:
import geopy.distance
import pandas as pd
df = pd.read_csv('coordinates.csv', sep=',', header=None)
site_coords = (38.898556, -77.037852)
for index, row in df.iterrows():
place2_coords = df
x = geopy.distance.vincenty(site_coords, place2_coords).km
print(x)
但是,当我打印x时,它会多次打印相同的距离,并且距离不正确 . 坐标文件看起来像(在记事本中打开时) - 但还有更多行:
,Latitude,Longitude
0,73.3645,-0.9015
1,73.3645,-0.3995
2,73.3645,-0.5825
所以我需要一种循环并找到距离的方法 .
3 回答
几件事,首先你要求元组和数据帧之间的距离,我不知道它是如何工作的 . 但是,假设数据框
df
只有两列,以下循环应该适合您如果您的文件看起来像
但你读的是“head = None”,
第一行将成为数据行 . 这可能是您获得“AttributeError:'Series'对象没有属性'Latitude'的原因 . ”
尝试从代码中删除“header = None” .
iterrows
方法将为数据框的每一行提供pandas.Series
对象,因此您可以稍微创建place2_coords
.使用pandas时,不推荐使用循环行 . 相反,您可以沿列应用函数 .