-1

google maps api에서 반환되는 dict 파일 유형을 처리하는 데 도움이 필요합니다.어떻게 Google Maps distance matrix 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 뮤즈, 브릭 스톤, 런던 SW2 2TR, 영국' '부쉬 넬 RD, 런던 SW17 8QP, 영국', '맥아 경기 수, 풀럼, 런던 SW6 2BX, 영국' , 'Knightsbridge, London SW7 1BJ, UK', 'Chelsea, London SW3 3EE, 영국', 'Hester Rd, London SW11 4AJ, 영국', 'Brixton, 런던 SW2 1HZ, 영국', 'Randall Cl, London SW11 영국 ','Sloane St, 런던 SW1X 9SF, 영국 ','Binfield Rd, London SW4 6TA, 영국 '],'행 ': [{'elements ': [{'duration ': {'text ' '', 'value': '1757', 'value': 1657}, '상태': 'OK', '거리': { '텍스트': '7.5km', '값' : [{ '기간': { '텍스트': '31 분 ','값 ': '1850', '상태': '확인', '거리': { '텍스트': '9.2km', '값': 9176}}}}, { '요소': [ 'duration': '텍스트': '27 분', '값': 1620 ','상태 ':'확인 ', '거리 ': {'텍스트 ':'7.0km ','값 ': 7038} } '}'} '}'} '}'} {} '}'{ '요소': [{ '지속 시간 : {'텍스트 ': '16 분', '값': 953} '상태': '확인', ' : '상태': '4.0', '값': 4038}}}}, { '요소': [{ '지속 시간 :'텍스트 ': '15 분', '값': 899} OK ', '거리 ': {'텍스트 ':'3.4km ','값 ': 3366}}}, {'요소 ': [{'duration ': {'text ': '21 mins' 'value': 1260}, 'status': 'OK', '거리': { '텍스트': '5.3km', '값': 5265}}}, { '요소': [{ 'duration ': {'텍스트 ': '28 분', '값': 1682}, '상태': '확인', 'distance': { 'text': '7.5 km', 'value': 7502}}}, { 'elements': [{ 'duration': { 'text': '23 mins ','value ' : 1368}, '상태': '확인', '거리': { '텍스트': '5.9km', '값': 5876}}}, { '요소': [{ 'duration': { 'text': '3.3 km', 'value': 3341}}}}, { 'text': '14 ','value ': 839},'status ':'OK ', '거리 ' 'elements': '거리': { '텍스트': '4.3km', '값': 982} '값'4294은}}]}], 은 'destination_addresses에는': [ '말 경비원 RD, 런던 SW1A 2HQ, 영국'], '상태': 'OK'}

그때 나는 USI 다음 코드를 추출하십시오.

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

나는 dist 데이터를 시도하고 처리하기 위해 df_from_list와 많은 다른 것들을 시도했다. 최종 목표는 각 행에 원점 주소가있는 행렬을 갖는 것입니다. 대상 주소는 열을 형성하고 거리와 시간은이 열 내의 데이터 변수로 나타냅니다.이

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

유사

뭔가 누군가가 나 위에 표시된 것과 유사한 아키텍처로 (위 그림 참조) my_distance 출력을 처리하는 데 도움이 바랍니다.

감사합니다.

답변

1

기본적으로 시작 주소와 대상 주소가 포함 된 사전을 만듭니다. 대상 주소에는 값의 튜플 목록이 있습니다. 튜플의 첫 번째 요소는 지속 시간이고 두 번째 요소는 입니다. (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) 
으로 데이터 프레임을 만듭니다.
관련 문제