У меня есть большой вложенный словарь, который содержит некоторые данные временных рядов, моя цель - извлечь эти данные временных рядов. Я могу выполнять некоторые базовые навигационные операции по словарю, но все эти разные типы данных действительно меня отталкивают. Вот MWE с вложенным словарем, который содержит данные о времени и времени и данные об осадках с 2 разных сайтов мониторинга. В конце концов, я хотел бы построить их вместе с любым количеством сайтов мониторинга.
Здесь я делаю все возможное, чтобы получить данные из словаря в массив numpy, а затем в pandas массив данных. Однако вы увидите, что в кадре данных имеется по одной строке на станцию и один столбец, в котором содержится массив осадков каждой станции. Я ожидал, что он покажет такое же количество столбцов, что и значения данных. Это лучший способ достичь моей цели? Если да, то как мне изменить количество столбцов?
import numpy as np
import pandas as pd
no_stations = 2
my_dict = {
"UNITS":{
"precipitation":"Inches"
},
"STATION": [
{'STATUS': 'ACTIVE',
'NAME' : 'STATION 1',
'ELEVATION': '758',
'OBSERVATIONS': {'date_time': [
'2020-04-13T13:00:00Z', '2020-04-13T14:00:00Z', '2020-04-13T15:00:00Z',
'2020-04-13T16:00:00Z', '2020-04-13T17:00:00Z', '2020-04-13T18:00:00Z',
'2020-04-13T19:00:00Z', '2020-04-13T20:00:00Z', '2020-04-13T21:00:00Z',
'2020-04-13T22:00:00Z', '2020-04-13T23:00:00Z', '2020-04-14T00:00:00Z',
'2020-04-14T01:00:00Z', '2020-04-14T02:00:00Z', '2020-04-14T03:00:00Z',
'2020-04-14T04:00:00Z', '2020-04-14T05:00:00Z', '2020-04-14T06:00:00Z',
'2020-04-14T07:00:00Z', '2020-04-14T08:00:00Z', '2020-04-14T09:00:00Z',
'2020-04-14T10:00:00Z', '2020-04-14T11:00:00Z', '2020-04-14T12:00:00Z',
'2020-04-14T13:00:00Z', '2020-04-14T14:00:00Z', '2020-04-14T15:00:00Z',
'2020-04-14T16:00:00Z', '2020-04-14T17:00:00Z', '2020-04-14T18:00:00Z'],
'precip_accum_set_1': [
0.0, 0.0, 0.0, 0.254, 1.27, 2.794, 4.064, 5.588, 6.858, 8.89, 10.922,
12.192, 12.954, 13.716, 15.24, 18.034, 18.288, 18.288, 18.288, 20.32,
22.606, 24.892, 25.908, 26.924, 27.432, 27.686, 27.686,
27.686, 27.686, 27.94]}},
{'STATUS': 'ACTIVE',
'NAME' : 'STATION 2',
'ELEVATION': '500',
'OBSERVATIONS': {'date_time': [
'2020-04-13T13:00:00Z', '2020-04-13T14:00:00Z', '2020-04-13T15:00:00Z',
'2020-04-13T16:00:00Z', '2020-04-13T17:00:00Z', '2020-04-13T18:00:00Z',
'2020-04-13T19:00:00Z', '2020-04-13T20:00:00Z', '2020-04-13T21:00:00Z',
'2020-04-13T22:00:00Z', '2020-04-13T23:00:00Z', '2020-04-14T00:00:00Z',
'2020-04-14T01:00:00Z', '2020-04-14T02:00:00Z', '2020-04-14T03:00:00Z',
'2020-04-14T04:00:00Z', '2020-04-14T05:00:00Z', '2020-04-14T06:00:00Z',
'2020-04-14T07:00:00Z', '2020-04-14T08:00:00Z', '2020-04-14T09:00:00Z',
'2020-04-14T10:00:00Z', '2020-04-14T11:00:00Z', '2020-04-14T12:00:00Z',
'2020-04-14T13:00:00Z', '2020-04-14T14:00:00Z', '2020-04-14T15:00:00Z',
'2020-04-14T16:00:00Z', '2020-04-14T17:00:00Z', '2020-04-14T18:00:00Z'],
'precip_accum_set_1': [
49.53, 49.53, 49.53, 50.038, 51.054, 52.324,53.594, 54.864, 56.134,
59.944, 61.214, 61.722,62.484, 64.008, 66.802, 67.056, 67.056, 67.31,
69.088, 71.628, 74.168, 75.184, 75.946, 76.454,76.708,
76.708, 76.708, 76.708, 76.708]}}
]
}
for key, value in my_dict.items():
print(key)
print(type(value))
precip = np.empty([no_stations], dtype=object)
dates = np.empty([no_stations], dtype=object)
for ii in range(no_stations):
precip[ii] = my_dict['STATION'][ii]['OBSERVATIONS']['precip_accum_set_1']
dates[ii] = my_dict['STATION'][ii]['OBSERVATIONS']['date_time']
precip[ii] = np.array(precip[ii], dtype = float)
dates[ii] = np.array(dates[ii], dtype = str)
df = pd.DataFrame(precip)
print(df)