有没有办法调用一次 API 而不是每个生成的输出两次?



我试图用Python更有效地编写代码。目前,下面的应用程序获取我想要的输出。但是,它为每个地址进行 2 次调用

参考:

import pandas as pd
from geocodio import GeocodioClient
API_KEY = 'insert_your_key_here'
client = GeocodioClient(API_KEY)
customers = pd.read_csv("example.csv", header=None)
customers['address_string'] = customers[0].map(str) + ' ' + customers[1].map(str) + customers[2].map(str)
geocoded_acuracy = []
geocoded_acuracy_type = []
for address in customers['address_string'].values:
geocoded_address = client.geocode(address)
accuracy = geocoded_address.best_match.get("accuracy")
accuracy_type = geocoded_address.best_match.get("accuracy_type")
geocoded_acuracy.append(accuracy)
geocoded_acuracy_type.append(accuracy_type)
customers['accuracy'] = geocoded_acuracy
customers['accuracy_type'] = geocoded_acuracy_type
results = customers[['address_string', 'accuracy', 'accuracy_type']]
results.to_csv('results.csv')

虽然代码运行并且我收到了我想要的输出。代码对每个地址的 api 进行 2 次调用。由于有 2500 次/天的限制,因此它很快就会被消耗掉。有没有办法在单个调用中调用精度和精度类型,因为根据文档,这些只是显示在原始正向地理编码函数本身的输出字典中。我的目标是每个地址只打 1 个电话。

数据集的Reprex(其中地址字符串是我在上述代码中的唯一输入(:

customers['address_string']
Out[5]: 
0         21236 Birchwood Loop, 99567, AK
1               1731 Bragaw St, 99508, AK
2            300 E Fireweed Ln, 99503, AK
3               4360 Snider Dr, 99654, AK
4     1921 W Dimond Blvd # 108, 99515, AK
5                2702 Peger Rd, 99709, AK
6              1651 College Rd, 99709, AK
7              898 Ballaine Rd, 99709, AK
8        23819 Immelman Circle, 99567, AK
9             9750 W Parks Hwy, 99652, AK
10           7205 Shorewood Dr, 99645, AK
Name: address_string, dtype: object

API 返回以下格式的 JSON:

from geocodio import GeocodioClient
client = GeocodioClient(YOUR_API_KEY)
location = client.geocode("1109 N Highland St, Arlington VA")

返回:

{
"input": {
"address_components": {
"number": "1109",
"predirectional": "N",
"street": "Highland",
"suffix": "St",
"formatted_street": "N Highland St",
"city": "Arlington",
"state": "VA",
"zip": "22201",
"country": "US"
},
"formatted_address": "1109 N Highland St, Arlington, VA 22201"
},
"results": [
{
"address_components": {
"number": "1109",
"predirectional": "N",
"street": "Highland",
"suffix": "St",
"formatted_street": "N Highland St",
"city": "Arlington",
"county": "Arlington County",
"state": "VA",
"zip": "22201",
"country": "US"
},
"formatted_address": "1109 N Highland St, Arlington, VA 22201",
"location": {
"lat": 38.886665,
"lng": -77.094733
},
"accuracy": 1,
"accuracy_type": "rooftop",
"source": "Virginia GIS Clearinghouse"
}
]
}

只需进行一次查询,然后从 JSON 中检索所有信息。

  • 批量地理编码
  • 单一地理编码

获取您的信息

location['results'][0]['accuracy']
location['results'][0]['accuracy_type']
  • 这是一个很棒的资源 Python 词典

使用您的代码:

  • 可能像下面这样的东西应该有效
  • 我只更新了for-loop
for address in customers['address_string'].values:
geocoded_address = client.geocode(address)
accuracy = geocoded_address['results'][0]['accuracy']
accuracy_type = geocoded_address['results'][0]['accuracy_type']
geocoded_acuracy.append(accuracy)
geocoded_acuracy_type.append(accuracy_type)
customers['accuracy'] = geocoded_acuracy
customers['accuracy_type'] = geocoded_acuracy_type

批处理的新代码:

  • 在列表中给定您的地址:
  • 使用熊猫
from geocodio import GeocodioClient
import pandas as pd
from pandas.io.json import json_normalize
addresses = ['21236 Birchwood Loop, 99567, AK',
'1731 Bragaw St, 99508, AK',
'300 E Fireweed Ln, 99503, AK',
'4360 Snider Dr, 99654, AK',
'1921 W Dimond Blvd # 108, 99515, AK',
'2702 Peger Rd, 99709, AK',
'1651 College Rd, 99709, AK',
'898 Ballaine Rd, 99709, AK',
'23819 Immelman Circle, 99567, AK',
'9750 W Parks Hwy, 99652, AK',
'7205 Shorewood Dr, 99645, AK']
client = GeocodioClient('api key')
locations = client.geocode(addresses)
df = json_normalize(locations, 'results')
formatted_address  accuracy        accuracy_type                                         source address_components.number address_components.street address_components.suffix address_components.formatted_street address_components.city     address_components.county address_components.state address_components.zip address_components.country  location.lat  location.lng address_components.predirectional
21236 Birchwood Loop Rd, Chugiak, AK 99567      1.00              rooftop                      Municipality of Anchorage                     21236            Birchwood Loop                        Rd                   Birchwood Loop Rd                 Chugiak        Anchorage Municipality                       AK                  99567                         US     61.408788   -149.486656                               NaN
1731 Bragaw St, Anchorage, AK 99508      1.00              rooftop                      Municipality of Anchorage                      1731                    Bragaw                        St                           Bragaw St               Anchorage        Anchorage Municipality                       AK                  99508                         US     61.204899   -149.808038                               NaN
300 E Fireweed Ln, Anchorage, AK 99503      1.00              rooftop                      Municipality of Anchorage                       300                  Fireweed                        Ln                       E Fireweed Ln               Anchorage        Anchorage Municipality                       AK                  99503                         US     61.197860   -149.878311                                 E
300 W Fireweed Ln, Anchorage, AK 99503      0.80              rooftop                      Municipality of Anchorage                       300                  Fireweed                        Ln                       W Fireweed Ln               Anchorage        Anchorage Municipality                       AK                  99503                         US     61.198304   -149.887737                                 W
4360 Snider Dr, Wasilla, AK 99654      1.00  range_interpolation  TIGER/Line® dataset from the US Census Bureau                      4360                    Snider                        Dr                           Snider Dr                 Wasilla     Matanuska-Susitna Borough                       AK                  99654                         US     61.584604   -149.339148                               NaN
4360 E Snider Dr, Wasilla, AK 99654      0.90              rooftop                      Matanuska-Susitna Borough                      4360                    Snider                        Dr                         E Snider Dr                 Wasilla     Matanuska-Susitna Borough                       AK                  99654                         US     61.584226   -149.340742                                 E
4360 Snider Dr, Wasilla, AK 99654      0.90  range_interpolation  TIGER/Line® dataset from the US Census Bureau                      4360                    Snider                        Dr                           Snider Dr                 Wasilla     Matanuska-Susitna Borough                       AK                  99654                         US     61.584903   -149.338583                               NaN
1921 W Dimond Blvd, Anchorage, AK 99515      1.00              rooftop                      Municipality of Anchorage                      1921                    Dimond                      Blvd                       W Dimond Blvd               Anchorage        Anchorage Municipality                       AK                  99515                         US     61.139078   -149.915706                                 W
2702 Peger Rd, Fairbanks, AK 99709      1.00              rooftop                   Fairbanks North Star Borough                      2702                     Peger                        Rd                            Peger Rd               Fairbanks  Fairbanks North Star Borough                       AK                  99709                         US     64.822680   -147.779801                               NaN
1651 College Rd, Fairbanks, AK 99709      1.00              rooftop                   Fairbanks North Star Borough                      1651                   College                        Rd                          College Rd               Fairbanks  Fairbanks North Star Borough                       AK                  99709                         US     64.862441   -147.754823                               NaN
898 Ballaine Rd, Fairbanks, AK 99709      1.00              rooftop                   Fairbanks North Star Borough                       898                  Ballaine                        Rd                         Ballaine Rd               Fairbanks  Fairbanks North Star Borough                       AK                  99709                         US     64.899323   -147.828632                               NaN
23819 Immelman Cir, Chugiak, AK 99567      1.00              rooftop                      Municipality of Anchorage                     23819                  Immelman                       Cir                        Immelman Cir                 Chugiak        Anchorage Municipality                       AK                  99567                         US     61.417786   -149.438269                               NaN
Big Lake, AK 99652      0.33                place  TIGER/Line® dataset from the US Census Bureau                       NaN                       NaN                       NaN                                 NaN                Big Lake     Matanuska-Susitna Borough                       AK                  99652                         US     61.517340   -149.953740                               NaN
7205 Shorewood Dr, Palmer, AK 99645      1.00  range_interpolation  TIGER/Line® dataset from the US Census Bureau                      7205                 Shorewood                        Dr                        Shorewood Dr                  Palmer     Matanuska-Susitna Borough                       AK                  99645                         US     61.625942   -149.266667                               NaN
7205 E Shorewood Dr, Palmer, AK 99645      0.90              rooftop                      Matanuska-Susitna Borough                      7205                 Shorewood                        Dr                      E Shorewood Dr                  Palmer     Matanuska-Susitna Borough                       AK                  99645                         US     61.626537   -149.268727                                 E
7205 Shorewood Dr, Palmer, AK 99645      0.90  range_interpolation  TIGER/Line® dataset from the US Census Bureau                      7205                 Shorewood                        Dr                        Shorewood Dr                  Palmer     Matanuska-Susitna Borough                       AK                  99645                         US     61.625909   -149.266960                               NaN

最新更新