Мне нужно сопоставить названия улиц с координатами GPS в кадре данных pandas.Я использую OSRM для этого;Я могу дать OSRM список координат GPS, и он даст мне имена, но моя серия содержит NaN и OSRM не принимает нули или нули, поэтому мне нужно отфильтровать их (легко), но затем вернуть результаты в соответствующиестроки;Как мне это сделать?Изменить: в кадре данных есть другие столбцы (здесь они обозначены t
, но их больше), которые я не могу потерять.
import pandas as pd
import numpy as np
import requests
import json
path = [
51.954974, 5.857131,
51.955014, 5.860725,
np.nan, np.nan,
51.954168, 5.866390,
51.954889, 5.868611,
]
path = [ {'t': t, 'lat': c[0], 'lon': c[1]} for t, c in enumerate(zip(*[path[i::2] for i in range(2)]))]
df = pd.DataFrame(path)
path = ';'.join(list(df[pd.notnull(df.lat)].apply(lambda x: str(x.lon) + ',' + str(x.lat), axis=1)))
osrm = 'http://router.project-osrm.org' # currently down
#osrm = 'http://localhost:5000'
url = osrm + '/match/v1/car/' + path + '?overview=full&annotations=nodes&tidy=true'
# OSRM is down now but this return [ "Metamorfosenallee", "Burgemeester Matsersingel", "Burgemeester Matsersingel", "Batavierenweg" ]
matched = [tp['name'] for tp in requests.post(url).json()['tracepoints']]
# how do I now get
# t lat lon name
# 0 51.954974, 5.857131, Metamorfosenallee
# 1 51.955014, 5.860725, Burgemeester Matsersingel
# 2 np.nan, np.nan, np.nan
# 3 51.954168, 5.866390, Burgemeester Matsersingel
# 4 51.954889, 5.868611, Batavierenweg
(отредактирован для добавления дополнительного столбца, который я не хочу терять)