【发布时间】:2020-03-07 11:14:53
【问题描述】:
我有网站的API文档http://json-homework.task-sss.krasilnikov.spb.ru/docs/9f66a575a6cfaaf7e43177317461d057,我要查找所有在某个城市(其中id为2)的学校学习过的用户。通过运行此代码(all_users 是一个列表,其中包含上一个任务中有关用户的主要信息):
school=[]
for user in all_users:
user_id=user.get('id')
url = f'http://json-homework.task-sss.krasilnikov.spb.ru/api/user/get?api_key=9f66a575a6cfaaf7e43177317461d057&user_id={user_id}&fields=schools'
data = rq.get(url)
school=school+json.loads(data.text)["response"]
school
我得到了这样的数据(这是输出的一小部分,填充了许多字段):
{'id': 136840302,
'first_name': 'Marina',
'last_name': 'Kushnir',
'is_closed': False,
'schools': [{'id': '352496',
'country': 1,
'city': 57,
'name': 'Лицей ИГУ',
'year_from': 2015,
'year_to': 2019,
'class': '',
'type': 2,
'type_str': 'Lyceum'}]},
所以我在参数'schools'中包含了一个参数'city',我只需要提取那些拥有这个参数'city': 2的用户。我也试过这段代码:
school=[]
for user in all_users:
user_id=user.get('id')
url = f'http://json-homework.task-sss.krasilnikov.spb.ru/api/user/get?api_key=9f66a575a6cfaaf7e43177317461d057&user_id={user_id}&fields=schools'
data = rq.get(url)
school=school+json.loads(data.text)["response"]
school_norm=json_normalize(school)
schools = school_norm.get('schools')
school2=[]
for i in schools:
if "'city' : 2" in i:
school2.append(json.loads(data.text)["response"])
sch=pd.DataFrame(school2)
但它不接受这样的条件if "'city' : 2" in i:。那么我该怎么做呢?
我的第一个任务的代码是
all_users = []
for page in range(1,42):
url=f'http://json-homework.task-sss.krasilnikov.spb.ru/api/groups/getmembers?api_key=9f66a575a6cfaaf7e43177317461d057&group_id=4508123&page={page}'
data=rq.get(url)
all_users = all_users + json.loads(data.text)["response"]
json_normalize(all_users)
group_data = pd.DataFrame(all_users, columns=['id','first_name','last_name'])
group_data = group_data.sort_values('id')
group_data = group_data.set_index('id')
group_data
和输出: 所以在我上面写的任务的输出中,我需要得到类似于这个数据框,但只有那些有学校城市 id=2 的人,正如我之前解释的那样
【问题讨论】:
-
你得到什么错误信息?
-
TypeError: 'float' 类型的参数不可迭代。虽然当我通过
.dtypes进行检查时,“学校”列具有对象类型,而不是浮动 -
我想我有办法,但不确定你的数据框应该是什么样子。鉴于上面的数据,您可以编辑问题并显示 df 应该是什么样子吗?
-
从之前的相关任务中编辑和添加了一些内容
-
还有一个问题:在您上面的数据中,“Marina”有两个 id:一个似乎是她自己的,一个似乎是她学校的 id。哪个 id 进入你的 df?
标签: json python-3.x if-statement url python-requests