使用python时,如何处理谷歌地图距离矩阵api的输出?

问题描述 投票:-1回答:2

我需要协助处理从google maps api返回的dict文件类型。

目前,结果正在向我发送我无法处理的结果数据(起始地址,结束地址,旅行时间,距离等)的字典。我可以简单地提取起始地址和结束地址,但是批量数据很难提取,我认为这是因为它的结构。

我的代码示例如下;

import googlemaps
import csv
import pandas as pd
postcodes = pd.read_csv("SW.csv", sep=',', usecols=['postcode'], squeeze=True)
infile1 = open('SW.csv', 'r')
reader1 = csv.reader(infile1)
Location1 = postcodes[0:10]
Location2 = 'SW1A 2HQ'
my_distance = gmaps.distance_matrix(Location1, Location2, mode='bicycling', language=None, avoid=None, units='metric',
                                        departure_time='2475925955', arrival_time=None,
                                        transit_routing_preference=None)
print(my_distance)

这会产生以下输出;

{'origin_addresses':['Cossar Mews,Brixton,London SW2 2TR,UK','Bushnell Rd,L​​ondon SW17 8QP,UK','Maltings Pl,Fulham,London SW6 2BX,UK','Knightsbridge,London SW7 1BJ,英国','切尔西,伦敦SW3 3EE,英国','Hester Rd,伦敦SW11 4AJ,英国','Brixton,伦敦SW2 1HZ,英国','Randall Cl,伦敦SW11 3TG,英国','Slo​​ane St,伦敦SW1X 9SF,UK','Binfield Rd,L​​ondon SW4 6TA,UK'],'rows':[{'elements':[{'duration':{'text':'28 mins','value':1657} ,'status':'OK','distance':{'text':'7.5 km','value':7507}}]},{'elements':[{'duration':{'text':' 31分钟','价值':1850},'状态':'确定','距离':{'文字':'9.2公里','价值':9176}}]},{'elements':[{ '持续时间':{'文字':'27分钟','价值':1620},'状态':'确定','距离':{'文字':'7.0公里','价值':7038}} ]},{'elements':[{'duration':{'text':'16 mins','value':953},'status':'OK','distance':{'text':'4.0 km','value':4038}}]},{'elements':[{'duration':{'text':'15 mins','value':899},'status':'OK','距离':{'t ext':'3.4 km','value':3366}}]},{'elements':[{'duration':{'text':'21 mins','value':1260},'status': '好','距离':{'text':'5.3 km','value':5265}}]},{'elements':[{'duration':{'text':'28 mins','价值':1682},'状态':'确定','距离':{'文字':'7.5公里','价值':7502}}]},{'elements':[{'duration':{ 'text':'23分钟','价值':1368},'状态':'确定','距离':{'text':'5.9 km','value':5876}}]},{' elements':[{'duration':{'text':'14分钟','value':839},'status':'OK','distance':{'text':'3.3 km','value ':'3341}}]},{'elements':[{'duration':{'text':'16 mins','value':982},'status':'OK','distance':{' text':'4.3 km','value':4294}}]}],'destination_addresses':['Horse Guards Rd,L​​ondon SW1A 2HQ,UK'],'status':'OK'}

然后我使用以下代码来提取它;

origin = my_distance['origin_addresses']
dest = my_distance['destination_addresses']
dist = my_distance['rows']

我已经尝试了df_from_list和许多其他人来尝试处理dist数据。最终目标是在每行上具有原点地址的矩阵,目标地址形成列,距离和时间作为这些列中的数据变量。

类似的东西

        |         DEST 1        |        DEST 2         |
        |   TIME    |      DIST |      TIME |      DIST |
START 1 |      X    |      Y    |     Z     |       T   |
START 2 |      A    |      B    |     C     |       T   |

请有人帮我处理my_distance输出(如上所示)到类似于上面显示的架构中。

谢谢!

python python-3.x google-maps dictionary google-distancematrix-api
2个回答
1
投票

这基本上创建了一个包含起始地址和目标地址的字典。目的地地址有一个tupels列表作为值。元组中的第一个元素是持续时间,第二个元素是距离,例如(45, 7.0)#45=45min and 7.0 = 7km。然后我用pandas.DataFrame.from_dict()创建数据框

import pandas as pd

dct = {d_adresses:[] for d_adresses in data['destination_addresses']}
dct['starts'] = []
for i in range(len(data['origin_addresses'])):
    duration=int(data['rows'][i]['elements'][0]['duration']['text'].split(' ')[0])
    distance=float(data['rows'][i]['elements'][0]['distance']['text'].split(' ')[0])

    for key in dct:
        if key != 'starts':
            dct[key].append((duration, distance))

    dct['starts'].append(data['origin_addresses'][i])
df = pd.DataFrame.from_dict(dct)
df.set_index('starts', inplace=True)

0
投票

我在运行gmaps.distance_matrix之前创建一个空数据帧,并将字典键放入数据框中。与上述解决方案类似:

    traffic = pd.DataFrame({'time': [], 'origins': [], 'destinations': [], 'destination_addresses': [], 'origin_addresses': [], 'rows': [], 'status': []})

    for origin in origins:
        for destination in destinations:
            traffic = traffic.append({'time': [00:00], 'origins': [origin], 'destinations': [destination]}, ignore_index=True)

            if origin != destination:
                if cityname == cityname:

                    # Get travel distance and time for a matrix of origins and destinations
                    traffic_result = gmaps.distance_matrix((origin), (destination),
                                        mode="driving", language=None, avoid=None, units="metric",
                                        departure_time=00:00, arrival_time=None, transit_mode=None,
                                        transit_routing_preference=None, traffic_model=None, region=None)

                    for key in traffic_result.keys():
                        for value in traffic_result[key]:
                            print(key, value)
                            traffic = traffic.append({key: [value]}, ignore_index=True)
© www.soinside.com 2019 - 2024. All rights reserved.