如何将 great_circle 距离转换为 Python 中的时间增量?
How to convert great_circle distance to timedelta in Python?
我已经使用 great_circle 函数来计算两个 coordinates.For 示例之间的距离,如果我有以下数据:
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
并从距离上求出时间,我们知道Time = Distance/Speed。
我假设速度为 80 公里/小时,我使用:
time= distance/80
得到的'time'的单位是'km'。我想把这个函数转换成时间。
df['time'] = pd.to_timedelta(time,unit='h')
我得到以下错误:
Error : ValueError: Invalid type for timedelta scalar: class 'geopy.distance.great_circle'
你能告诉我如何获得 'time' 作为时间函数而不是距离 'km' 吗?
您需要确保时间格式正确并且切勿输入浮点数。
您可以使用以下命令将浮点数转换为分钟和小时:
# 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
考虑使用 .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
我已经使用 great_circle 函数来计算两个 coordinates.For 示例之间的距离,如果我有以下数据:
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
并从距离上求出时间,我们知道Time = Distance/Speed。 我假设速度为 80 公里/小时,我使用:
time= distance/80
得到的'time'的单位是'km'。我想把这个函数转换成时间。
df['time'] = pd.to_timedelta(time,unit='h')
我得到以下错误:
Error : ValueError: Invalid type for timedelta scalar: class 'geopy.distance.great_circle'
你能告诉我如何获得 'time' 作为时间函数而不是距离 'km' 吗?
您需要确保时间格式正确并且切勿输入浮点数。
您可以使用以下命令将浮点数转换为分钟和小时:
# 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
考虑使用 .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