2017-10-15 5 views
1

J'ai quelques problèmes avec la conversion d'un JSON composé de listes de différentes longueurs à une base de données pandas. Je reçois le JSON à partir d'une page Web comme celle-ci:Listes imbriquées de différentes longueurs d'un JSON à Pandas Dataframe

import requests, json 
import numpy as np 

r = requests.get('https:a_web_page') 

data = r.json() 
type(data) 

De cela, j'ai eu comme résultat que "données" est une liste.

Le fichier JSON de la page Web ressembler à ceci:

[ [ 1411333200000 , 0.0 , [ 0.0 , 0.0 , 10.0 , 5.4014 , 0.42247 , 0.2517 , 
0.0 , 0.0 , 0.0 , 0.0 , 0.0616 , 0.0 , 0.0]] , 
[ 1411419600000 , 0.0 , [ 0.0 
, 0.0 , 10.0 , 4.8029 , 2.17222 , 2.216 , 0.0 , 0.0 , 0.0 , 0.0 , 0.800 , 
0.0 , 0.0]] , 
[ 1411506000000 , 1.13383 , [ 9.448 , 0.0 , 10.0 , 6.07 , 2.1722 , 2.97500 , 
0.0 , 0.0 , 0.0 , 0.0 , 3.8017 , 1.17 , 2.893]]] 

Ce qui est un fichier JSON correct car il peut être prouvé dans cette page web: https://konklone.io/json/

Ce que je suis en train de faire est de convertir la variable « données » à une trame de données comme ceci:

1411333200000 0 0 0 10 5.4014 0.42247 0.2517 0 0 0 0 
0.0616 0 0 
1411419600000 0 0 0 10 4.8029 2.17222 2.216 0 0 0 0 0.8 
0 0 
1411506000000 1.13383 9.448 0 10 6.07 2.1722 2.975 0 0 0 
0 3.8017 1.17 2.893 

Je veux dire, une trame de données avec 15 colonnes et 3 lignes.

Avec la façon normale de passer une liste à une trame de données: df = pd.DataFrame (données), je reçois 3 colonnes, l'une est une 3ème liste de 13 éléments, il doesnt travail:

1411333200000 0 [0 0 10 5.4014 0.42247 0.2517 0 0 0 0 
0.0616 0 0] 
1411419600000 0 [0 0 10 4.8029 2.17222 2.216 0 0 0 0 0.8 
0 0] 
1411506000000 1.13383 [9.448 0 10 6.07 2.1722 2.975 0 0 0 
0 3.8017 1.17 2.893] 

J'ai aussi tryed pour aplatir « données » avec le code suivant, mais aussi le travail didnt:

J'ai aussi tryed Défaire et json_normalize, mais je coudn't le faire fonctionner. Je ne sais pas quoi faire d'autre, Si quelqu'un peut me donner un coup de main ou me faire un conseil serait gentil ..

Répondre

0
df=pd.DataFrame(data) 

df=pd.concat([df.iloc[:,0:2],df[2].apply(pd.Series)],axis=1) 
df.columns=list(range(df.shape[1])) 
df 
Out[63]: 
       0  1  2 3  4  5  6  7 8 \ 
0 1411333200000 0.00000 0.000 0.0 10.0 5.4014 0.42247 0.2517 0.0 
1 1411419600000 0.00000 0.000 0.0 10.0 4.8029 2.17222 2.2160 0.0 
2 1411506000000 1.13383 9.448 0.0 10.0 6.0700 2.17220 2.9750 0.0 
    9 10 11  12 13  14 
0 0.0 0.0 0.0 0.0616 0.00 0.000 
1 0.0 0.0 0.0 0.8000 0.00 0.000 
2 0.0 0.0 0.0 3.8017 1.17 2.893 
+0

Exactement ce dont j'avais besoin, merci beaucoup Wen! – Javi