2017-05-31 6 views
2

ich JSON der Form haben:convert JSON python Datenrahmen

{ 
    "abc": 
     { 
     "123":[45600,null,3567], 
     "378":[78689,2345,5678], 
     "343":[23456,null,null] 
     } 
    } 

ich json Daten von einer URL erhalten haben unten Art und Weise verwenden:

json_data = json.loads(url.read().decode()) 

Ich brauche es in Python Pandas Datenrahmen zu konvertieren wie folgt:

ds y_ds1 y_ds2 y_ds2 
123 45600 null 3567 
378 78689 2345 5678 
343 23456 null null 

ich versuche, so zu tun:

df = pd.read_json (url, orient = 'Spalten')

Es gibt Ergebnis in folgenden Form:

  abc 
123  [45600,null,3567] 
378  [78689,2345,5678] 
343  [23456,null,null] 

Jede Art und Weise, durch denen ich einfach meine zweite Spalte der Matrix in nicht geteilt. der Spalten im Array und benennen Sie die Überschriften wie oben erwähnt?

Bearbeitungen: Nach dem gegebenen json gibt es 3 Elemente in allen Arrays; Was ist, wenn die Array-Größe 2 oder 4 oder 5 für alle Elemente beträgt? Hinweis: JSON enthält alle Schlüssel mit Arrays ähnlicher Größe. Aber die Größe des Arrays kann alles sein.

Antwort

2

Funktioniert das für Sie?

import pandas as pd 
import numpy as np 

null = np.nan 

my_json = { 
    "abc": 
     { 
     "123":[45600,null,3567], 
     "378":[78689,2345,5678], 
     "343":[23456,null,null] 
     } 
    } 

pd.DataFrame(my_json.get('abc')).T.reset_index().rename(columns={'index':'ds',0:'y_ds1',1:'y_ds2',2:'y_ds3'}) 

    ds y_ds1 y_ds2 y_ds2 
0 123 45600.0  NaN 3567.0 
1 343 23456.0  NaN  NaN 
2 378 78689.0 2345.0 5678.0 

Wenn der Index Spalte die ds Spalte bleiben können, als Sie dies tun können:

pd.DataFrame(my_json.get('abc')).T.rename(columns=(lambda x: 'y_ds' + str(x))) 

     y_ds0 y_ds1 y_ds2 
123 45600.0  NaN 3567.0 
343 23456.0  NaN  NaN 
378 78689.0 2345.0 5678.0 

Edit: Angesichts der DF Sie in Ihrem bearbeiten präsentiert können Sie es konvertieren, wie so:

temp = df['abc'].apply(lambda x: pd.Series(x)).rename(columns=(lambda x: :'y_ds'+str(x))) 

temp 

     y_ds0 y_ds1 y_ds2 
123 45600.0  NaN 3567.0 
378 78689.0 2345.0 5678.0 
343 23456.0  NaN  NaN 
+0

überprüfen Sie die bearbeitete Frage –

+0

überprüfen Sie bitte die Bearbeitung, wenn Sie etwas vorschlagen können. –

+0

@NikitaGupta überprüfen Sie meine Bearbeitung –