Pandas Google 距离矩阵 API - 将坐标传递到 URL

Pandas Google Distance Matrix API - Pass coordinates into URL

我正在使用 Google 距离矩阵 API,我想将数据帧中的坐标输入到 API 和 return 之间的持续时间和距离两点。 这是我的数据框:

import pandas as pd
import simplejson
import urllib
import numpy as np

Record   orig_lat    orig_lng       dest_lat     dest_lng      
1        40.7484405  -74.0073127    40.7115242   -74.0145492   
2        40.7421218  -73.9878531    40.7727216   -73.9863531   

首先,我需要结合 orig_lat & orig_lngdest_lat & dest_lng 转化为字符串,然后传入url。所以我尝试创建变量 orig_coord & dest_coord 然后将它们传递到 URL 和returning 值:

orig_coord = df[['orig_lat','orig_lng']].apply(lambda x: '{},{}'.format(x[0],x[1]), axis=1)
dest_coord = df[['dest_lat','dest_lng']].apply(lambda x: '{},{}'.format(x[0],x[1]), axis=1)

for row in df.itertuples():
    url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&units=imperial&MYGOOGLEAPIKEY".format(orig_coord,end_coord)
    result = simplejson.load(urllib.urlopen(url))
    df['driving_time_text'] = result['rows'][0]['elements'][0]['duration']['text']

但我收到以下错误:"TypeError: () got an unexpected keyword argument 'axis'"

所以我的问题是:如何将两列的值连接成一个字符串,然后将该字符串传递给 URL 并输出结果?

提前致谢!

嗯,我不确定您是如何构建数据框的。也许 post 那些细节?但是,如果您可以忍受按位置引用元组元素,这对我有用:

import pandas as pd

data = [{'orig_lat': 40.748441, 'orig_lng': -74.007313, 'dest_lat': 40.711524, 'dest_lng': -74.014549}, 
        {'orig_lat': 40.742122, 'orig_lng': -73.987853, 'dest_lat': 40.772722, 'dest_lng': -73.986353}]
df = pd.DataFrame(data)
for row in df.itertuples():
 orig_coord='{},{}'.format(row[1],row[2])
 dest_coord='{},{}'.format(row[3],row[4])
 url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&units=imperial&MYGOOGLEAPIKEY".format(orig_coord,dest_coord)
 print url

产生

http://maps.googleapis.com/maps/api/distancematrix/json?origins=40.748441,-74.007313&destinations=40.711524,-74.014549&units=imperial&MYGOOGLEAPIKEY
http://maps.googleapis.com/maps/api/distancematrix/json?origins=40.742122,-73.987853&destinations=40.772722,-73.986353&units=imperial&MYGOOGLEAPIKEY

要用结果更新数据框,因为 row 是元组且不可写,您可能希望在迭代时跟踪当前索引。也许是这样的:

data = [{'orig_lat': 40.748441, 'orig_lng': -74.007313, 'dest_lat': 40.711524, 'dest_lng': -74.014549, 'result': -1}, 
        {'orig_lat': 40.742122, 'orig_lng': -73.987853, 'dest_lat': 40.772722, 'dest_lng': -73.986353, 'result': -1}]
df = pd.DataFrame(data)
i_row = 0
for row in df.itertuples():
 orig_coord='{},{}'.format(row[1],row[2])
 dest_coord='{},{}'.format(row[3],row[4])
 url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&units=imperial&MYGOOGLEAPIKEY".format(orig_coord,dest_coord)
 # Do stuff to get your result
 df['result'][i_row] = result
 i_row++