Я работаю над личным проектом, визуализирующим данные о местоположении, и здесь я удаляю данные геокодирования из Google через Geocoding API, подавая его координаты и получая название города и страну.API-интерфейс Google Geocoding для Python - IndexError: индекс индекса за пределами диапазона?
Это CSV-файл с двумя столбцами: «Местоположение» (широта и долгота) и «Время» (дата + время). Есть 8533 строки.
Образец данных:
Location Time
--------------------------------------------------
| 41.2911084,2.0779035 | 4/15/2015 10:58 |
--------------------------------------------------
| 41.2885014,2.0725591 | 4/15/2015 10:07 |
--------------------------------------------------
| 41.3484125,2.1442487 | 4/15/2015 9:56 |
--------------------------------------------------
У меня возникли проблемы с API где я получаю сообщение об ошибке. Позвольте мне сначала показать код.
# import necessary modules
import pandas as pd
import json, requests, logging
# configure logging for our tool
lfh = logging.FileHandler('reverseGeocoder.log')
lfh.setFormatter(logging.Formatter('%(levelname)s %(asctime)s %(message)s'))
log = logging.getLogger('reverseGeocoder')
log.setLevel(logging.INFO)
log.addHandler(lfh)
# load the gps coordinate data
df = pd.read_csv('LocationHistory.csv')
# create new columns
df['geocode_data'] = ''
df['city'] = ''
df['country'] = ''
df.head()
# function that handles the geocoding requests
def reverseGeocode(latlng):
result = {}
url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng={0}&key={1}'
apikey = 'API_KEY_GOES_HERE'
request = url.format(latlng, apikey)
log.info(request)
data = json.loads(requests.get(request).text)
log.info(data)
result = data['results'][0]['address_components']
return {
'city': result[3]['long_name'],
'country': result[6]['long_name']
}
# comment out the following line of code to geocode the entire dataframe
#df = df.head()
for i, row in df.iterrows():
# for each row in the dataframe, geocode the lat-long data
revGeocode = reverseGeocode(df['Location'][i])
df['geocode_data'][i] = revGeocode
df['city'] = revGeocode['city']
df['country'] = revGeocode['country']
# once every 100 loops print a counter
#if i % 100 == 0:
print i
df.head()
df.to_csv('LocationHistory2.csv', encoding='utf-8', index=False)
Ошибка в вопросе, что я все время получаю:
Traceback (most recent call last):
File "D:\...\ReverseGeocoding.py", line 45, in <module>
revGeocode = reverseGeocode(df['Location'][i])
File "D:\...\ReverseGeocoding.py", line 37, in reverseGeocode
'country': result[6]['long_name']
IndexError: list index out of range
Я думаю, что часть проблемы заключается в том, что мне нужно проверить на месте, в-случае API не возвращает ничего для местоположения. Почему он ничего не вернет, я понятия не имею.
Я довольно новичок в мире API (и Python), но как я могу получить этот код в рабочем состоянии?
это работало для меня. просто изменил 'item [type]' to 'item ['type']' – Silas