Python >> Python opplæring >  >> Python Tag >> Pandas

pandas read_json:Hvis du bruker alle skalarverdier, må du passere en indeks

Prøv

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

Den filen inneholder bare nøkkelverdipar der verdiene er skalarer. Du kan konvertere den til en dataramme med ser.to_frame('count') .

Du kan også gjøre noe slikt:

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

Nå er data en ordbok. Du kan sende den til en datarammekonstruktør som dette:

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

Du kan gjøre som @ayhan nevner som vil gi deg et kolonnebasisformat

Eller du kan omslutte objektet i [ ] (kilde) som vist nedenfor for å gi deg et radformat som vil være praktisk hvis du laster inn flere verdier og planlegger å bruke matrise for maskinlæringsmodellene dine.

df = pd.DataFrame([data])


Jeg tror det som skjer er at dataene i

map_index_to_word = pd.read_json('people_wiki_map_index_to_word.json')

blir lest som en streng i stedet for en json

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

er faktisk

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

Siden en streng er en skalar, vil den at du skal laste den inn som en json, du må konvertere den til en dict som er nøyaktig hva den andre responsen gjør

Den beste måten er å gjøre en json-last på strengen for å konvertere den til en dict og laste den inn i pandaer

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