Python ValueError:长度不匹配:预期轴有0个元素,新值有8个元素
我有一个数据框,其中包含许多位置及其位置的详细信息,例如纬度和经度。我需要做的是使用MapAPI请求每个地方的json文件来获取这个地方附近的信息,然后打印出来 在我尝试创建一个函数来重复我对数据的任何位置所做的相同操作之前,一切都非常顺利 蟒蛇3 熊猫 我可以分别为任何位置获得我想要的,但我的功能不起作用 我搜索了一些关于同一类问题的线程,例如先更改列或创建新的数据帧,但它们没有帮助Python ValueError:长度不匹配:预期轴有0个元素,新值有8个元素,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框,其中包含许多位置及其位置的详细信息,例如纬度和经度。我需要做的是使用MapAPI请求每个地方的json文件来获取这个地方附近的信息,然后打印出来 在我尝试创建一个函数来重复我对数据的任何位置所做的相同操作之前,一切都非常顺利 蟒蛇3 熊猫 我可以分别为任何位置获得我想要的,但我的功能不起作用 我搜索了一些关于同一类问题的线程,例如先更改列或创建新的数据帧,但它们没有帮助 def get_nearby_venues(names, prices, latitudes, longitu
def get_nearby_venues(names, prices, latitudes, longitudes):
venues_list=[]
for name, price, lat, lng in zip(names, prices, latitudes, longitudes):
print(name)
# construct urls from page 1 to page 5(the first page will be displayed when page_num=0)
url_list = []
for page_num in range(0, 5):
urls = 'http://api.map.baidu.com/place/v2/search?query=公园$超市$美食$学校$医院$公交车站$银行$电影院&location={},{}&radius=1000&output=json&scope=2&page_size=20&page_num='+str(page_num)+'&ak=(API key)'.format(lat, lng)
url_list.append(urls)
# make request to get json content
results_json_list = []
for each in url_list:
results_json = requests.get(each).json()['results']
# merge all pages json content into one file and all of my location data is stored in it.
results_json_list.extend(results_json)
# I try to use the following code to print out but failed.
# return only relevant information for each nearby venue
for each_item in results_json_list:
venues_list.append([
name,
price,
lat,
lng,
each_item.get('name'),
each_item.get('location').get('lat'),
each_item.get('location').get('lng'),
each_item.get('detail_info').get('type')])
nearby_venues = pd.DataFrame([item for sublist in venues_list for item in sublist])
# nearby_venues = pd.DataFrame(venues_list)
nearby_venues.columns = ['Apartment',
'Apartment Price',
'Apartment Latitude',
'Apartment Longitude',
'Venue',
'Venue Latitude',
'Venue Longitude',
'Venue Category']
return nearby_venues
# function code ends here
# dataframe data_venues is what I want to the results stored in for each location of my data and dataframe 'Data_map' is my previous dataframe which contains 'Name', 'Categories', 'Latitude', 'Longitude' columns of my data
data_venues = get_nearby_venues(names=Data_map['Name'],
prices=Data_map['Price'],
latitudes=Data_map['Latitude'],
longitudes=Data_map['Longitude']
)
ERROR MESSAGE code:
ValueError Traceback (most recent call last)
<ipython-input-33-9b269af7a350> in <module>
8 prices=Data_map.['Price'],
9 latitudes=Data_map['Latitude'],
---> 10 longitudes=Data_map['Longitude']
11 )
<ipython-input-32-01b4632eb663> in get_nearby_venues(names, prices, latitudes, longitudes)
44 'Venue Latitude',
45 'Venue Longitude',
---> 46 'Venue Category']
47
48
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py in __setattr__(self, name, value)
5078 try:
5079 object.__getattribute__(self, name)
-> 5080 return object.__setattr__(self, name, value)
5081 except AttributeError:
5082 pass
pandas/_libs/properties.pyx in pandas._libs.properties.AxisProperty.__set__()
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py in _set_axis(self, axis, labels)
636
637 def _set_axis(self, axis, labels):
--> 638 self._data.set_axis(axis, labels)
639 self._clear_item_cache()
640
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/internals/managers.py in set_axis(self, axis, new_labels)
153 raise ValueError(
154 'Length mismatch: Expected axis has {old} elements, new '
--> 155 'values have {new} elements'.format(old=old_len, new=new_len))
156
157 self.axes[axis] = new_labels
ValueError: Length mismatch: Expected axis has 0 elements, new values have 8 elements
def获取场馆附近的信息(名称、价格、纬度、经度):
场馆列表=[]
名称、价格、纬度、压缩液化天然气(名称、价格、纬度、经度):
印刷品(名称)
#构建从第1页到第5页的URL(当page_num=0时将显示第一页)
url_list=[]
对于范围(0,5)内的页码:
URL=http://api.map.baidu.com/place/v2/search?query=公园$超市$美食$学校$医院$公交车站$银行$电影院&location={},{}&radius=1000&output=json&scope=2&page_size=20&page_num='+str(page_num)+'&ak=(API键)'.format(lat,lng)
url\u list.append(url)
#请求获取json内容
结果\u json\u列表=[]
对于url_列表中的每一个:
results\u json=requests.get(each).json()['results']
#将所有页面json内容合并到一个文件中,所有我的位置数据都存储在其中。
results\u json\u list.extend(results\u json)
#我尝试使用以下代码打印出来,但失败了。
#仅返回附近每个场馆的相关信息
对于结果列表中的每个项目:
地点列表([
名称
价格,
拉特,
液化天然气,
每个_item.get('name'),
每个项目.get('location').get('lat'),
每个项目。获取('location')。获取('lng'),
每个项目。获取('detail_info')。获取('type')]))
邻近场馆=pd.DataFrame([场馆子列表中的项目\u子列表中的项目])
#附近场馆=pd.数据帧(场馆列表)
附近的_viouses.columns=[“公寓”,
“公寓价格”,
“公寓纬度”,
“经度公寓”,
"地点",,
“场地纬度”,
“地点经度”,
“场馆类别”]
返回附近的场馆
#函数代码到此结束
#dataframe data_Vinces是我希望为数据的每个位置存储的结果,dataframe“data_map”是我以前的数据框,其中包含我的数据的“名称”、“类别”、“纬度”、“经度”列
数据场馆=获取场馆附近的数据(名称=数据地图['Name'],
价格=数据图[‘价格’],
纬度=数据和地图[‘纬度’],
经度=数据图[经度]
)
错误消息代码:
ValueError回溯(最近一次调用上次)
在里面
8价格=数据地图。['Price'],
9纬度=数据和地图[‘纬度’],
--->10经度=数据图[经度]
11 )
在附近的场馆(名称、价格、纬度、经度)
44‘场地纬度’,
45‘场地经度’,
--->46“场馆类别”]
47
48
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py in_u__setattr__;(self、name、value)
5078试试:
5079对象。获取属性(自身,名称)
->5080返回对象。\uuuu setattr\uuuuu(self、name、value)
5081除属性错误外:
5082通行证
pandas/_libs/properties.pyx在pandas._libs.properties.AxisProperty.uuuu set_uuu()
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py in_set_axis(self、axis、labels)
636
637 def设置轴(自身、轴、标签):
-->638自身数据。设置轴(轴、标签)
639自我清除项目缓存()
640
/set_axis中的Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/internals/managers.py(self、axis、new_标签)
153升值误差(
154'长度不匹配:预期轴有{old}个元素,新'
-->155“值有{new}个元素”。格式(old=old_len,new=new_len))
156
157自轴[轴]=新的_标签
ValueError:长度不匹配:预期轴有0个元素,新值有8个元素
当使用单个列创建df时,您不能df.columns=更多列的列表
继续
就在你到达附近的之后
插入以下代码,它将为正在进行的操作提供指导。但不是为了实现你想要的
nearby = nearby.rename(
columns=dict( zip(
[0,1,2,3],
['Apartment','Apartment Price', 'Apartment Latitude', 'Apartment Longitude']))
)
for coln in ['Venue','Venue Latitude','Venue Longitude','Venue Category']:
nearby.insert(column=coln, loc=len(nearby.columns), value=np.nan)
错误的根本原因是,新数据的列数与旧数据的列数不相同,这就是为什么旧方法对旧数据有效,而对新数据无效 当使用单个列创建df时,您不能
df.columns=更多列的列表
继续
就在你到达附近的之后
插入以下代码,它将为正在进行的操作提供指导。但不是为了实现你想要的
nearby = nearby.rename(
columns=dict( zip(
[0,1,2,3],
['Apartment','Apartment Price', 'Apartment Latitude', 'Apartment Longitude']))
)
for coln in ['Venue','Venue Latitude','Venue Longitude','Venue Category']:
nearby.insert(column=coln, loc=len(nearby.columns), value=np.nan)
错误的根本原因
for num in range(0, 5):
urls = 'http://api.map.baidu.com/place/v2/search?query=公园$超市$美食$学校$医院$公交车站$银行$电影院&location={},{}&radius=1000&output=json&scope=2&page_size=20&page_num={}&ak=(API key)'.format(
lat,
lng,
num)