与 python 一起使用时,如何处理 google 映射距离矩阵 api 的输出?

How do you handle outputs from google maps distance matrix api when using with python?

我需要帮助处理从 google 映射 api.

返回的字典文件类型

目前,结果将我无法处理的结果数据(起始地址、结束地址、旅行时间、距离等)交给我。我可以简单地提取开始和结束地址,但是事实证明批量数据很难提取,我认为这是因为它的结构。

我的代码示例如下;

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, London SW17 8QP, UK', 'Maltings Pl, Fulham, London SW6 2BX, UK', 'Knightsbridge, London SW7 1BJ, UK', 'Chelsea, London SW3 3EE, UK', 'Hester Rd, London SW11 4AJ, UK', 'Brixton, London SW2 1HZ, UK', 'Randall Cl, London SW11 3TG, UK', 'Sloane St, London SW1X 9SF, UK', 'Binfield Rd, London SW4 6TA, UK'], 'rows': [{'elements': [{'duration': {'text': '28 mins', 'value': 1657}, 'status': 'OK', 'distance': {'text': '7.5 km', 'value': 7507}}]}, {'elements': [{'duration': {'text': '31 mins', 'value': 1850}, 'status': 'OK', 'distance': {'text': '9.2 km', 'value': 9176}}]}, {'elements': [{'duration': {'text': '27 mins', 'value': 1620}, 'status': 'OK', 'distance': {'text': '7.0 km', 'value': 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', 'distance': {'text': '3.4 km', 'value': 3366}}]}, {'elements': [{'duration': {'text': '21 mins', 'value': 1260}, 'status': 'OK', 'distance': {'text': '5.3 km', 'value': 5265}}]}, {'elements': [{'duration': {'text': '28 mins', 'value': 1682}, 'status': 'OK', 'distance': {'text': '7.5 km', 'value': 7502}}]}, {'elements': [{'duration': {'text': '23 mins', 'value': 1368}, 'status': 'OK', 'distance': {'text': '5.9 km', 'value': 5876}}]}, {'elements': [{'duration': {'text': '14 mins', '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, London 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 输出(如上所示)处理成与上所示类似的体系结构。

谢谢!

这基本上创建了一个包含起始地址和目标地址的字典。 目标地址有一个元组列表作为值。元组中的第一个元素是持续时间,第二个元素是距离 例如(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)

我在 运行 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)