Следующее немного запутано, но оно должно привести вас, по крайней мере, достаточно близко к тому месту, куда вы хотите go. Обратите внимание, что предполагается, что ваши данные имеют допустимый формат json (в вашем вопросе это не так; вам придется разбираться с этим отдельно - , посмотрите этот вариант, чтобы исправить неверно сформированный json.
Во всяком случае, учитывая это, я лично считаю, что лучший способ справиться с этим типом вопроса - использовать jsonpath для python. Итак, вот так:
Давайте предположим, что ваши данные состоят из двух ( допустимый json) один из которых удовлетворяет условию, что идентификатор города равен 2, а другой нет:
schls ="""
[
{
"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"
}
]
},
{
"id": 5555555555555,
"first_name": "Marino",
"last_name": "Kush",
"is_closed": "False,",
"schools": [
{
"id": "355556",
"country": 1,
"city": 2,
"name": "Лице ИГ",
"year_from": 2016,
"year_to": 2018,
"class": "",
"type": 4,
"type_str": "Lyceu"
}
]
}
]
"""
Давайте обработаем данные:
import pandas as pd
import json
from jsonpath_ng import jsonpath, parse
data = json.loads(schls)
jsn_search = parse('$..schools') #this is your search string; looking for info in the "schools" entry
match = jsn_search.find(data) #search for the search string in the loaded json
schools = []
for m in match:
if m.context.value.get('schools')[0].get('city')== 2: #this is your condition!
schools.append(m.context.value) #condition met; append all surrounding info to list
df=pd.DataFrame(schools)
sch = df.drop(['is_closed' , 'schools'] , axis='columns')
sch
Вывод:
id first_name last_name
0 5555555555555 Marino Kush