Я отправляю запрос API в Карты Google, используя библиотеку geopy, чтобы получить имя области для каждого адреса в моем pandas кадре данных, а затем пытаюсь сохранить его в своем собственном столбце.
import geopy
import numpy as np
from geopy.geocoders import GoogleV3
def get_area(address):
geolocator = GoogleV3(api_key=api_key, domain='maps.googleapis.com', scheme=None, client_id=None,
secret_key=None,
user_agent=None )
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)
data = geocode((address), timeout=None)
#print(data.raw)
area = []
for item in data.raw['address_components']:
if data.raw is None:
area.append(None)
continue
found = False
typs = set(item['types'])
if typs == set(['neighborhood', 'political']):
print(item['long_name'])
area.append(item['long_name'])
found = True
break
if not found:
area.append(None)
return area
df_test['Area'] = df_test[['L_Address']].apply(lambda row: get_area(row['L_Address']), axis=1)
Просто для ясности, вот как выглядит необработанный ответ от Google Maps:
{'address_components': [{'long_name': '7155', 'short_name': '7155', 'types': ['street_number']}, {'long_name': 'Hall Road', 'short_name': 'Hall Rd', 'types': ['route']}, {'long_name': 'Newton', 'short_name': 'Newton', 'types': ['neighborhood', 'political']}, 'location_type': 'ROOFTOP', 'viewport': {'northeast': {'lat': 49.1335569802915, 'lng': -122.8458199197085}, 'southwest': {'lat': 49.1308590197085, 'lng': -122.8485178802915}}}
Вот ответ, который я получаю для кода выше:
0 [None, None, None, None, None, None, None]
1 [None, None, None, None, None, None, None]
2 [None, None, None, None, None, None, None]
3 [None, None, South Westminster]
4 [None, None, Whalley]
5 [None, None, None, None, None, None, None]
6 [None, None, None, None, None, None, None]
7 [None, None, Newton]
8 [None, None, Whalley]
9 [None, None, None, None, None, None, None]
10 [None, None, None, None, None, None, None]
Итак, я знаю Я запутался где-то в моем l oop, потому что мне нужно только одно имя области для каждой строки. Есть предложения?