web-dev-qa-db-fra.com

comment charger un json dans un pandas dataframe?

J'utilise un REST API pour obtenir un fichier json comme suit:

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)

et la trame de données ressemble

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

Comment puis-je transformer cette seule colonne (qui ressemble à un dictionnaire) en colonnes appropriées dans Pandas?

ÉDITER

les données brutes json ressemblent à ceci

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

Merci!

10
ℕʘʘḆḽḘ

pd.read_json(json_str)

Voici la documentation Pandas .

MODIFIER:

Pour une liste de json str, vous pouvez également:

import json
import pandas as pd

df = pd.DataFrame.from_records(map(json.loads, json_lst))
7
Lifu Huang

Eh bien, il me semble que JSON importe dans l'imbrication contenant toutes les variations de dict et de liste, tandis que Pandas nécessite une seule collection de dict avec des éléments itérables. Vous devez donc faire un peu de conversion si ils ne correspondent pas.

En supposant que j'interprète correctement la structure de votre JSON (et peut-être pas depuis, vous n'imprimez que le produit final, pas la structure JSON), il semble que ce soit une liste de dictionnaires. Si tel est le cas, voici la solution:

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)

Éditer:

Des valeurs sont fournies, pour faire fonctionner mon code, vous avez juste besoin des éléments suivants devant:

json = json["items"]

Je pense que cela devrait fonctionner, mais cela dépend de la façon dont les requêtes traitent JSON. Donnez-moi une impression de l'objet json si cela ne fonctionne pas.

1
jonathf