Я пытаюсь закончить sh от выполнения задания для курса, и мне трудно заставить один аспект моего кода работать правильно.
Я использую API-интерфейс foursquare, чтобы исследовать окрестности в Портленде и найти, в каких из них есть книжные магазины (и подобные места). Я близок к тому, чтобы он выполнялся, но я продолжаю отмечать вышеупомянутый ValueError и не знаю, как реструктурировать мой DF, чтобы он имел правильную форму.
Вот мой код:
def getNearbyVenues(names, latitudes, longitudes, limit=500):
venues_list=[]
for name, lat, lng in zip(names, latitudes, longitudes):
print(name)
url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&ll={},{}&v={}&query={}&radius={}&limit={}'.format(
CLIENT_ID,
CLIENT_SECRET,
VERSION,
lat,
lng,
query,
radius,
LIMIT)
try:
results = requests.get(url, "none").json()['response']['groups'][0]['items']
venues_list.extend([(
name,
lat,
lng,
v['venue']['name'],
v['venue']['location']['lat'],
v['venue']['location']['lng'],
v['venue']['categories'][0]['name']) for v in results])
except KeyError:
venues_list.extend([
name,
lat,
lng])
nearby_venues = pd.DataFrame(venues_list, columns = ['Neighborhood',
'Neighborhood Latitude',
'Neighborhood Longitude',
'Venue',
'Venue Latitude',
'Venue Longitude',
'Venue Category'])
return(nearby_venues)
*** NEXT CELL***
PDX_venues = getNearbyVenues(names=PDX_NeighDF['Neighborhood'],
latitudes=PDX_NeighDF['Latitude'],
longitudes=PDX_NeighDF['Longitude']
)
PDX_venues.head()
Я взял исходную функцию из предыдущей лаборатории в курсе, поэтому я знаю, что она должна работать. Первая ячейка на самом деле выполняется нормально, но ValueError помечается в следующей ячейке, где я пытаюсь использовать определенную функцию. Что заставляет меня думать, что проблема должна быть в самой функции. Мне пришлось внести в него некоторые изменения для своего уникального задания, чтобы это могло быть частью проблемы. Вот изменения в функцию, которую я сделал за пределами базовых c входов:
В некоторых районах Портленда нет мест, которые были возвращены в моем запросе API и которые помечали «KeyError», поскольку в возвращаемом json у них не было секции «group», поэтому мне пришлось добавить строки «try / исключением», за исключением районов, которые не возвращали места. Это работало нормально, когда я впервые запустил его и разрешил ячейка для выполнения. Однако использование этой функции в следующей ячейке привело к значению «ValueError».
Я попытался исправить ValueError в следующей ячейке, изменив venues_list.append .extend по предложению другого пользователя в сообщении stackoverflow, у которого возникла проблема, аналогичная моей. Похоже, это не сильно помогло, так как я все еще получаю ValueError, но до того, как он был помечен как имеющий один элемент вместо 7 (то же самое вопрос, другая форма).
Любая помощь будет принята с благодарностью, это был трудный проект, и я был Я смог продвинуться далеко вперед, используя свои собственные ресурсы, но эта проблема меня полностью озадачила. Заранее спасибо!
Кроме того, вот полная трассировка ValueError:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/managers.py in create_block_manager_from_blocks(blocks, axes)
1677 blocks = [
-> 1678 make_block(values=blocks[0], placement=slice(0, len(axes[0])))
1679 ]
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/blocks.py in make_block(values, placement, klass, ndim, dtype, fastpath)
3283
-> 3284 return klass(values, ndim=ndim, placement=placement)
3285
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/blocks.py in __init__(self, values, placement, ndim)
2791
-> 2792 super().__init__(values, ndim=ndim, placement=placement)
2793
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/blocks.py in __init__(self, values, placement, ndim)
127 "Wrong number of items passed {val}, placement implies "
--> 128 "{mgr}".format(val=len(self.values), mgr=len(self.mgr_locs))
129 )
ValueError: Wrong number of items passed 1, placement implies 7
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-40-66be6cf8c7d3> in <module>
1 PDX_venues = getNearbyVenues(names=PDX_NeighDF['Neighborhood'],
2 latitudes=PDX_NeighDF['Latitude'],
----> 3 longitudes=PDX_NeighDF['Longitude']
4 )
5
<ipython-input-39-53e5a94bf83d> in getNearbyVenues(names, latitudes, longitudes, limit)
39 'Venue Latitude',
40 'Venue Longitude',
---> 41 'Venue Category'])
42
43 return(nearby_venues)
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
462 mgr = arrays_to_mgr(arrays, columns, index, columns, dtype=dtype)
463 else:
--> 464 mgr = init_ndarray(data, index, columns, dtype=dtype, copy=copy)
465 else:
466 mgr = init_dict({}, index, columns, dtype=dtype)
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/construction.py in init_ndarray(values, index, columns, dtype, copy)
211 block_values = [values]
212
--> 213 return create_block_manager_from_blocks(block_values, [columns, index])
214
215
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/managers.py in create_block_manager_from_blocks(blocks, axes)
1686 blocks = [getattr(b, "values", b) for b in blocks]
1687 tot_items = sum(b.shape[0] for b in blocks)
-> 1688 construction_error(tot_items, blocks[0].shape[1:], axes, e)
1689
1690
~/conda/envs/python/lib/python3.6/site-packages/pandas/core/internals/managers.py in construction_error(tot_items, block_shape, axes, e)
1717 raise ValueError("Empty data passed with indices specified.")
1718 raise ValueError(
-> 1719 "Shape of passed values is {0}, indices imply {1}".format(passed, implied)
1720 )
1721
ValueError: Shape of passed values is (228, 1), indices imply (228, 7)