1

我使用 great_circle 函数来查找两个坐标之间的距离。例如,如果我有以下数据:

lat1= ['-77.85']
lon1= ['80.23']
lat2= [-22.4532']
lon2= ['62.45']

为了找到距离,我使用以下代码:

import pandas as pd
from geopy.distance import great_circle
from datetime import datetime,timedelta as dt
distance = df.apply(lambda x: great_circle((x['lat1'], x['lon1']),(x['lat2'], x['lon2'])), axis = 1)  # gives distance in km

并从远处找到时间,因为我们知道时间 = 距离/速度。我假设速度为 80 公里/小时,我使用:

time= distance/80  

获得的“时间”单位为“公里”。我想将此函数转换为时间。

df['time'] = pd.to_timedelta(time,unit='h')   

我收到以下错误:

Error : ValueError: Invalid type for timedelta scalar: class 'geopy.distance.great_circle'

你能告诉我如何获得“时间”作为时间函数而不是距离“公里”吗?

4

2 回答 2

0

您需要确保时间格式正确,并且永远不要输入浮点数。

您可以使用以下命令将浮点数转换为分钟和小时:

# time = distance / speed
time = 2.75 # 2 hours + 45 minutes
result = '0 days {0:02.0f}:{1:02.0f}:00'.format(*divmod(time * 60, 60)).split(":")

 # => result = "0 days 02:45:00"

df['time'] = pd.to_timedelta(result)   #now it should work
于 2017-04-12T09:43:24.993 回答
0

考虑使用.km属性。

演示:

In [33]: df
Out[33]:
    lat1   lon1     lat2   lon2
0 -77.85  80.23 -22.4532  62.45

In [34]: distance = x.apply(lambda x: great_circle((x['lat1'], x['lon1']),
                                                   (x['lat2'], x['lon2'])).km,
                                                   axis = 1)
#  ---->                                                                  ^^^

In [35]: distance
Out[35]:
0    6233.235674
dtype: float64

In [36]: df['time'] = pd.to_timedelta(distance/80,unit='h')

In [37]: df
Out[37]:
    lat1   lon1     lat2   lon2                   time
0 -77.85  80.23 -22.4532  62.45 3 days 05:54:55.605600
于 2017-04-12T10:17:53.840 回答