Su JSON es una matriz con un solo objeto adentro, por lo que cuando lo lee, obtiene una lista con un diccionario adentro. Puede acceder a su diccionario accediendo al elemento 0 en la lista, como se muestra a continuación:
json1_data = json.loads(json1_str)[0]
Ahora puede acceder a los datos almacenados en los puntos de datos tal como esperaba:
datapoints = json1_data['datapoints']
Tengo una pregunta más si alguien puede morder: estoy tratando de tomar el promedio de los primeros elementos en estos puntos de datos (es decir, puntos de datos [0] [0]). Solo para enumerarlos, intenté hacer puntos de datos [0: 5] [0] pero todo lo que obtengo es el primer punto de datos con ambos elementos en lugar de querer obtener los primeros 5 puntos de datos que contienen solo el primer elemento. ¿Hay alguna forma de hacer esto?
datapoints[0:5][0]
no hace lo que esperas. datapoints[0:5]
devuelve un nuevo segmento de lista que contiene solo los primeros 5 elementos, y luego agregar [0]
al final tomará solo el primer elemento de ese segmento de lista resultante . Lo que necesita usar para obtener el resultado que desea es una comprensión de la lista :
[p[0] for p in datapoints[0:5]]
Aquí hay una manera simple de calcular la media:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Si está dispuesto a instalar NumPy , entonces es aún más fácil:
import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8
El uso del ,
operador con la sintaxis de segmentación para las matrices de NumPy tiene el comportamiento que originalmente esperaba con los sectores de la lista.