2016-07-13 2 views
1

Ich habe eine ziemlich große JSON-Datei von Protokolldaten, die ich versuche, in XLS oder CSV zu konvertieren. Etwas in dem Prozess nimmt nur die ersten 1000 Reihen, und ich kann nicht herausfinden, was dies verursachen könnte.Pandas Dataframe falsche Anzahl von Zeilen

import json 
import pprint 
import pandas as pd 
from pandas.io.json import json_normalize 

f = open('GetLog.json', 'r') 
writer = pd.ExcelWriter('output.xlsx') 
payload = json.load(f) 
df = json_normalize(payload, 'Result') 
f.close() 

pprint.pprint(df) 
df.to_excel(writer,'Log Output') 
writer.save() 
writer.close() 

Der leicht hygienisiert json-Extrakt ist unten, aber es genügt ich nur interestd im Ergebnis zu sagen bin, wie die Nutzlast für Nachrichten im Allgemeinen leer ist.

{"Log":{"Messages":[]},"Result":[{"logdate":"/Date(1468270785461)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.461"},{"logdate":"/Date(1468270785430)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.430"},{"logdate":"/Date(1468270785398)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.398"},{"logdate":"/Date(1468270785367)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.367"},{"logdate":"/Date(1468270785336)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.336"},{"logdate":"/Date(1468270785227)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.227"},{"logdate":"/Date(1468270785196)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.196"},{"logdate":"/Date(1468270785164)/","message":"ErrorText","logtype":0,"module":"WatchFolder","logdateStr":"2016/07/12 06:59:45.164"}],"success":true,"TotalCount":5648}

Der Versuch, in Pandas nativ importieren nicht direkt mit dem Fehler: ‚Valueerror: dicts mit nicht-Series Mixing zu zweideutig Ordnung führen kann.‘

Letztlich ist dies ein Skript, das ich will nur bei einem Webservice auf einem entferntes System zeigen und eine Stunde im Wert von Protokollen einmal extrahieren oder zweimal am Tag

Antwort

0

es funktionierte - endete mit ijson bis zu den json laden Datei und nur die Ergebniswerte, die ich wollte. Beispiel-Code ist hier:

import csv 
import ijson 
import pprint 
import pandas as pd 

from pandas.io.json import json_normalize 

#print flattenjson(x) 
#pprint.pprint 
f = open('GetLog.json', 'r') 
writer = pd.ExcelWriter('output.xlsx') 
df = pd.DataFrame() 

for item in ijson.items(f, 'Result'): 
    df1 = pd.DataFrame(item) 
    if df.empty: 
     df = df1 
    else: 
     df.append(df1, ignore_index=True) 
f.close() 

df.to_excel(writer,'Log Output') 
writer.save() 
writer.close() 

Live-Version holt die json von einem Server mit ein paar Parameter Datumsbereich angeben.