web-dev-qa-db-fra.com

pandas read_json: "Si vous utilisez toutes les valeurs scalaires, vous devez passer un index"

J'ai quelques difficultés à importer un fichier JSON avec des pandas.

import pandas as pd
map_index_to_Word = pd.read_json('people_wiki_map_index_to_Word.json')

C'est l'erreur que je reçois: 

ValueError: If using all scalar values, you must pass an index

La structure de fichier est simplifiée comme ceci:

{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}

Il provient du cours d’apprentissage automatique de l’Université de Washington sur Coursera. Vous pouvez trouver le fichier ici .

13
Marco Fumagalli

Essayer

ser = pd.read_json('people_wiki_map_index_to_Word.json', typ='series')

Ce fichier ne contient que des paires de valeurs clé où les valeurs sont des scalaires. Vous pouvez le convertir en une structure de données avec ser.to_frame('count').

Vous pouvez aussi faire quelque chose comme ça:

import json
with open('people_wiki_map_index_to_Word.json', 'r') as f:
    data = json.load(f)

Maintenant, les données sont un dictionnaire. Vous pouvez le transmettre à un constructeur dataframe comme ceci:

df = pd.DataFrame({'count': data})
17
ayhan

Je pense que ce qui se passe est que les données dans 

map_index_to_Word = pd.read_json('people_wiki_map_index_to_Word.json')

est lu comme une chaîne au lieu d'un json

{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}

est en fait

'{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}'

Puisqu'une chaîne est un scalaire, elle veut que vous la chargiez en tant que JSON, vous devez la convertir en dict, ce que fait exactement l'autre réponse

Le meilleur moyen est de faire un json chargé sur la chaîne pour le convertir en dict et le charger en pandas

myfile=f.read()
jsonData=json.loads(myfile)
df=pd.DataFrame(data)
0
Anant Gupta