response = request_2.json()
for key in response.keys():
new = response[key]
if isinstance(new, dict):
if 'Tank1FuelUpDnVol' in new['Params']:
index = new['Params'].index('Tank1FuelUpDnVol')
time = new['Params'].index('DateTimeFirst')
last_time = new['Params'].index('DateTimeLast')
value = new['Items']
if value[0]["Caption"] == 'Заправка':
tank_value = value[0]['Values'][index]
start_of_refueling = value[0]['Values'][time]
end_of_refueling = value[0]['Values'][last_time]
print(tank_value)
df = pd.DataFrame({
'tank_value':tank
})
В принципе все. Но это плохой способ, правильно вообще не процессировать данные python циклами и читать весь json в фрейм и потом делать выборку из него. tank = []
response = request_2.json()
for key in response.keys():
new = response[key]
if isinstance(new, dict):
if 'Tank1FuelUpDnVol' in new['Params']:
index = new['Params'].index('Tank1FuelUpDnVol')
time = new['Params'].index('DateTimeFirst')
last_time = new['Params'].index('DateTimeLast')
value = new['Items']
if value[0]["Caption"] == 'Заправка':
tank_value = value[0]['Values'][index]
start_of_refueling = value[0]['Values'][time]
end_of_refueling = value[0]['Values'][last_time]
tank.append(tank_value)
df = pd.DataFrame({"tank_value": tank})
pprint(df)
Затем естественно вне цикла после твоего кодаА это ты почему не прочитал.
df = pd.DataFrame({"tank_value": tank})
pprint(df)
Вот это вне тела все циклов. tank.append((tank_value, start_of_refueling, end_of_refueling, key, [i['Serial'] for i in response]))
[
(1,2,'a',[100,200]),
(1,2,'b',[300,400])
]
Это как выглядит твой tank после двух итераций. Так вот как ты хочешь что бы это выглядело, как эти данные из списка должны распределяться. Или может я не совсем верно тебя понял? if isinstance(new, dict):
with open('data.json') as json_file:
json_object = json.load(json_file)
df = pd.json_normalize(json_object)
Где data.json это твой json файл. exploded = df.explode('d051eb0d-0445-4c0d-aeb2-4f22a03a5886.ParamTypes')
И распечатай. Вот все твои данные в рамках одного фрейма из которого надо пробовать работать, они логически связаны. Понимаешь, его можно начинать доводить до ума, а не плодить кучу таблиц и гадать потом что к чему в них. response_2 = request_2.json()
df = pd.json_normalize(response_2)
exploded = df.explode('d051eb0d-0445-4c0d-aeb2-4f22a03a5886.Items.Values')
pprint(exploded)
items = df['d051eb0d-0445-4c0d-aeb2-4f22a03a5886.Items'].apply(pd.Series).T[0].apply(pd.Series)
print(items).
То есть это уже фрейм с какой то толковой информацией. Его можно еще дальше раскрыть. И все данные что нужно вот так собирать. response_2 = request_2.json()
df = pd.json_normalize(response_2)[['d051eb0d-0445-4c0d-aeb2-4f22a03a5886']]
items = (df['d051eb0d-0445-4c0d-aeb2-4f22a03a5886.Items']
.apply(pd.Series).T[0]
.apply(pd.Series)
.explode('Values'))
pprint(items)
Все равно None? for key in second_response.keys():
new = second_response[key]
if isinstance(new, dict):
if 'Tank1FuelUpDnVol' in new['Params']:
index = new['Params'].index('Tank1FuelUpDnVol')
time = new['Params'].index('DateTimeFirst')
last_time = new['Params'].index('DateTimeLast')
value = new['Items']
if value[0]["Caption"] == 'Заправка':
for item in value:
tank_value = value[0]['Values'][index]
start_of_refueling = value[0]['Values'][time]
end_of_refueling = value[0]['Values'][last_time]
tank.append((tank_value, start_of_refueling, end_of_refueling, key))