我需要协助处理从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,London 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,英国','Sloane St,伦敦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分钟','价值':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,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输出(如上所示)到类似于上面显示的架构中。
谢谢!
这基本上创建了一个包含起始地址和目标地址的字典。目的地地址有一个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)
我在运行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)