Я довольно новичок в Python и работаю с SmartyStreets API. Я пытаюсь прочитать в фрейме данных, который содержит адреса и просто проверить их. Тем не менее, я сталкиваюсь с проблемами и не дает никаких результатов. Приведенный ниже код должен просто выводить операторы print в конце для каждой строки во фрейме данных.
Я бы хотел, чтобы функция получала имена своих переменных из столбцов во фрейме данных, который содержит правильная информация.
Например: при чтении данных функция должна получить свою адресную переменную из столбца Street1. Аналогично, Город должен быть из столбца Город, Штат из штата и Почтовый индекс из почтового индекса.
Таким образом, для первой итерации функция должна хранить переменные следующим образом:
lookup.street = '1600 Amphitheatre Pkwy'
lookup.city = 'Mountain view"
lookup.state = 'CA'
lookup.zip = '94043'
Конечная цель будет заключаться в том, чтобы добавить в конец каждой строки столбец округа с соответствующим округом из API. Однако я не могу заставить это работать без ошибок. Любая помощь будет полезна. При необходимости вы можете получить бесплатный API-ключ на 250 вызовов в месяц на веб-сайте SmartyStreets. Код, который я включил, взят из примеров на github. Это может быть не самый эффективный способ сделать это, если у вас есть более эффективный способ кодирования, не стесняйтесь включать это в свой ответ. Используемый код и найденная ошибка показаны ниже.
import pandas as pd
from smartystreets_python_sdk import StaticCredentials, exceptions, ClientBuilder
from smartystreets_python_sdk.us_street import Lookup as StreetLookup
##Defines Dictionary
dict = {'Street1': ["1600 Amphitheatre Pkwy", "1 Infinite Loop", "1 Rosedale"],
'City': ['Mountain view', 'Cupertino', 'Baltimore'],
'State': ['CA', 'CA', 'MD'],
'Zipcode': ['94043', '95014', '21237']}
##Converts Dictionary to Data Frame
df = pd.DataFrame(dict)
##Defines Function
def run(address = '', city = '', state = '', zipcode = ''):
auth_id = 'ID HERE'
auth_token = 'TOKEN HERE'
credentials = StaticCredentials(auth_id, auth_token)
client = ClientBuilder(credentials).build_us_street_api_client()
lookup = StreetLookup()
#lookup.input_id = '' ##Optional ID from your system
#lookup.addressee = addressee
lookup.street = address
##lookup.street2 = address2
#lookup.secondary = secondary ##STE, Apartment, etc.
#lookup.urbanization = '' ##PR Addresses ONLY
lookup.city = city
lookup.state = state
lookup.zipcode = zipcode
lookup.candidates = 1
lookup.match = 'Invalid'
try:
client.send_lookup(lookup)
except exceptions.SmartyException as err:
print(err)
return
result = lookup.result
if not result:
print("No candidates. This means the address is not valid.")
return
first_candidate = result[0]
print("Address is valid. (There is at least one candidate)\n")
print("ZIP Code: " + first_candidate.components.zipcode)
print("County: " + first_candidate.metadata.county_name)
for c, candidate in enumerate(lookup.result):
print("- {}: {}, {}, {}".format(c, candidate.delivery_line_1, candidate.last_line, candidate.metadata.county_name))
##Runs function
df.apply(run(address = 'Street1', city = 'City', state = 'State', zipcode = 'Zipcode'))
При этом я получаю следующую ошибку:
TypeError: («Объект 'NoneType' не вызывается» , 'произошло по индексу Steet1')