use*_*364 4 python geopy pandas
我是 Geopy 的新手。我在这家运输公司工作,需要获取卡车运行的总公里数。
我在这里看到了一些答案,但它们对我不起作用。
我有来自卡车上安装的 GPS 的以下数据框
latitude longitude
0 -25.145439 -54.294871
1 -24.144564 -54.240094
2 -24.142564 -54.198901
3 -24.140093 52.119021
Run Code Online (Sandbox Code Playgroud)
第一步是制作第三个专栏,将所有内容转变为一个点,但我所有的尝试都失败了
我写的
df['point'] = df['latitude'].astype(float),df['longitude'].astype(float)
Run Code Online (Sandbox Code Playgroud)
它返回一个对象。我希望它返回一个点。我的目标是:
latitude longitude Point
0 -25.145439 -54.294871 (-25.145439 -54.294871)
1 -24.144564 -54.240094 (-24.144564 -54.240094)
2 -24.142564 -54.198901 (-24.142564 -54.198901)
3 -24.140093 52.119021 (-24.140093 52.119021)
Run Code Online (Sandbox Code Playgroud)
然后我想与这两个保持距离,这样我就会有这样的东西:
latitude longitude Point Distance KM
0 -25.145439 -54.294871 (-25.145439 -54.294871) 0
1 -24.144564 -54.240094 (-24.144564 -54.240094) 0,2
2 -24.142564 -54.198901 (-24.142564 -54.198901) 0,4
3 -24.140093 52.119021 (-24.140093 52.119021) 0,2
Run Code Online (Sandbox Code Playgroud)
请注意,距离是与上面行的差异(它已经按顺序排列)
我在尝试:
df['distance'] = geodesic(df['point'],df['point'].shift(1))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,它不适用于元组。
有人知道这个问题的解决方案吗?
tks
创建一个point系列:
import pandas as pd
df = pd.DataFrame(
[
(-25.145439, -54.294871),
(-24.144564, -54.240094),
(-24.142564, -54.198901),
(-24.140093, 52.119021),
],
columns=['latitude', 'longitude']
)
from geopy import Point
from geopy.distance import distance
df['point'] = df.apply(lambda row: Point(latitude=row['latitude'], longitude=row['longitude']), axis=1)
Run Code Online (Sandbox Code Playgroud)
In [2]: df
Out[2]:
latitude longitude point
0 -25.145439 -54.294871 25 8m 43.5804s S, 54 17m 41.5356s W
1 -24.144564 -54.240094 24 8m 40.4304s S, 54 14m 24.3384s W
2 -24.142564 -54.198901 24 8m 33.2304s S, 54 11m 56.0436s W
3 -24.140093 52.119021 24 8m 24.3348s S, 52 7m 8.4756s E
Run Code Online (Sandbox Code Playgroud)
添加新的移位point_next系列:
In [2]: df
Out[2]:
latitude longitude point
0 -25.145439 -54.294871 25 8m 43.5804s S, 54 17m 41.5356s W
1 -24.144564 -54.240094 24 8m 40.4304s S, 54 14m 24.3384s W
2 -24.142564 -54.198901 24 8m 33.2304s S, 54 11m 56.0436s W
3 -24.140093 52.119021 24 8m 24.3348s S, 52 7m 8.4756s E
Run Code Online (Sandbox Code Playgroud)
In [4]: df
Out[4]:
latitude longitude point point_next
0 -25.145439 -54.294871 25 8m 43.5804s S, 54 17m 41.5356s W None
1 -24.144564 -54.240094 24 8m 40.4304s S, 54 14m 24.3384s W 25 8m 43.5804s S, 54 17m 41.5356s W
2 -24.142564 -54.198901 24 8m 33.2304s S, 54 11m 56.0436s W 24 8m 40.4304s S, 54 14m 24.3384s W
3 -24.140093 52.119021 24 8m 24.3348s S, 52 7m 8.4756s E 24 8m 33.2304s S, 54 11m 56.0436s W
Run Code Online (Sandbox Code Playgroud)
计算距离:
df['point_next'] = df['point'].shift(1)
df.loc[df['point_next'].isna(), 'point_next'] = None
Run Code Online (Sandbox Code Playgroud)
In [6]: df
Out[6]:
latitude longitude point distance_km
0 -25.145439 -54.294871 25 8m 43.5804s S, 54 17m 41.5356s W NaN
1 -24.144564 -54.240094 24 8m 40.4304s S, 54 14m 24.3384s W 111.003172
2 -24.142564 -54.198901 24 8m 33.2304s S, 54 11m 56.0436s W 4.192654
3 -24.140093 52.119021 24 8m 24.3348s S, 52 7m 8.4756s E 10449.661388
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7806 次 |
| 最近记录: |