2016-05-22 11 views
8

Używam REST API uzyskać plik json następująco:jak załadować json do pandasowej ramki danych?

import urllib2 
import pandas as pd 
import numpy as np 
import requests 

request='myrequest' 
data= requests.get(request) 
json=data.json() 
df=pd.DataFrame(json) 

i dataframe wygląda

           items 
0 {u'access': u'all', u'count': 501, u'time': 2014} 
1 {u'access': u'all', u'count': 381, u'time': 2015} 

Jak mogę przekształcić tę jedną kolumnę (który wygląda jak słownika) do prawidłowego kolumny w Pandach?

EDIT

surowe dane json wygląda to

{ 
    "items": [ 
    { 
     "access": "all", 
     "count": 200, 
     "time": 2015 
    }, 
    { 
     "access": "all", 
     "count": 14, 
     "time": 2015 
    }, 
    ] 
} 

Dzięki!

+1

Wystarczy załadować JSON do słownika, zanim przekształcisz go w DataFrame. –

+0

dzięki! jak mogę to zrobić? –

+1

Czy możesz dodać swój przykładowy plik? Napiszę odpowiedź. –

Odpowiedz

4

pd.read_json(json_str)

Oto Pandas documentation.

EDIT:

Listę json Str można też po prostu:

import json 
import pandas as pd 

df = pd.DataFrame.from_records(map(json.loads, json_lst)) 
+0

daje mi 'TypeError: Oczekiwany ciąg lub Unicode ' –

+1

@Noobie Czy możesz udostępniać nieprzetworzone dane? – ayhan

+1

Jeśli 'json' jest listą, powinieneś' read_json' dla każdego elementu z tej listy. Wejście 'read_json' powinno być' str'. –

1

Cóż, wydaje mi się, że JSON import do gniazdowania zawierającej żadnych wahań dicts i listy , podczas gdy Pandy wymagają pojedynczej kolekcji dict z elementami iterowalnymi. Musisz więc zrobić trochę konwersji, jeśli nie pasują.

Zakładając, że poprawnie interpretuję strukturę Twojego JSON (a może nie, ponieważ drukujesz tylko produkt końcowy, a nie strukturę JSON), wygląda na to, że jest to lista słowników. Jeśli tak jest, oto rozwiązanie:

data = {k:[v] for k,v in json[0].items()} 
for jso in json[1:]: 
    for k,v in jso.items(): 
     data[k].append(v) 

df = pd.DataFrame(data) 

Edit:

Wartości są przewidziane, aby dostać moją pracę kodu, wystarczy następujący przed:

json = json["items"] 

I myślę, że to powinno działać, ale zależy to od tego, w jaki sposób żądania przetwarzają JSON. Daj mi wydruk obiektu json, jeśli nie działa.

+0

dzięki! Dostarczyłem ci surowego jsona –

Powiązane problemy