Python: geopy.distance.geodesic 在 for 循环中
Python: geopy.distance.geodesic in a for loop
我有以下数据,我正在尝试使用它们的纬度和经度来计算从一个观测到另一个观测的地理距离。
trip3
>>
trip_id latitude longitude
0 9367efd103c7314d70446927130c9b98778fbbd0 57.728867 11.949463
1 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
2 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
3 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
4 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
... ... ... ...
30473 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691685 12.009715
30474 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691452 12.010811
30475 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690945 12.011210
30476 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690468 12.011681
30477 d0fe1a916d47228c09911b487146731d75c7d728 57.690361 12.011670
要计算我正在尝试的距离:
# Empty string
current_trip_id = ""
# Creating a new column for the distance between observations of the same trip
# all rows have a default value of 0
trip3["geopy_distance"] = 0
# Loop
for index,row in trip3.iterrows():
if row["trip_id"] == current_trip_id:
lat_coor = row["latitude"]
lon_coor = row["longitude"]
final_pos = row["latitude"], row["longitude"]
my_dist = geopy.distance.geodesic(initial_pos[0], initial_pos[1], final_pos[0], final_pos[1])
trip3.loc[index, "geopy_distance"] = my_dist
# Update loop
current_trip_id = row["trip_id"]
initial_pos = row["latitude"], row["longitude"]
但是,我得到错误:
单个数字已传递给 Point 构造函数。这可能是一个错误,因为仅用纬度构建点似乎毫无意义。如果这正是本意,则显式传递零经度以消除此错误。
此代码适用于定义的半正弦距离函数,但不适用于 geopy。我很想知道这两者有何不同。所以我只想计算 geopy 距离,因为据说这往往比 haversine 更准确。
如何改进我的循环来计算这个距离?
根据 the documentation,geopy.distance.geodesic
将其参数作为 (lat, lon) 元组。
我有以下数据,我正在尝试使用它们的纬度和经度来计算从一个观测到另一个观测的地理距离。
trip3
>>
trip_id latitude longitude
0 9367efd103c7314d70446927130c9b98778fbbd0 57.728867 11.949463
1 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
2 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
3 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
4 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
... ... ... ...
30473 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691685 12.009715
30474 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691452 12.010811
30475 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690945 12.011210
30476 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690468 12.011681
30477 d0fe1a916d47228c09911b487146731d75c7d728 57.690361 12.011670
要计算我正在尝试的距离:
# Empty string
current_trip_id = ""
# Creating a new column for the distance between observations of the same trip
# all rows have a default value of 0
trip3["geopy_distance"] = 0
# Loop
for index,row in trip3.iterrows():
if row["trip_id"] == current_trip_id:
lat_coor = row["latitude"]
lon_coor = row["longitude"]
final_pos = row["latitude"], row["longitude"]
my_dist = geopy.distance.geodesic(initial_pos[0], initial_pos[1], final_pos[0], final_pos[1])
trip3.loc[index, "geopy_distance"] = my_dist
# Update loop
current_trip_id = row["trip_id"]
initial_pos = row["latitude"], row["longitude"]
但是,我得到错误:
单个数字已传递给 Point 构造函数。这可能是一个错误,因为仅用纬度构建点似乎毫无意义。如果这正是本意,则显式传递零经度以消除此错误。
此代码适用于定义的半正弦距离函数,但不适用于 geopy。我很想知道这两者有何不同。所以我只想计算 geopy 距离,因为据说这往往比 haversine 更准确。
如何改进我的循环来计算这个距离?
根据 the documentation,geopy.distance.geodesic
将其参数作为 (lat, lon) 元组。