Pandas数据帧错误的行数

时间:2016-07-13 01:12:03

标签: python json csv pandas

我有一个相当大的日志数据json文件,我试图转换为XLS或CSV。 这个过程中的某些东西只占用了前1000行,我无法弄清楚可能导致这种情况的原因。

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()

略微清理过的json摘录如下所示,但我只能说我只对结果感兴趣,因为消息的有效负载通常是空的。

  

{"登录" {"消息":[]},"结果":[{" LOGDATE":&#34 ; /日期(1468270785461)/""消息":" ERRORTEXT""日志类型":0,"模块&#34 ;: " WatchFolder"" logdateStr":" 2016年7月12日   06:59:45.461"},{" LOGDATE":" /日期(1468270785430)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.430"},{" LOGDATE":" /日期(1468270785398)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.398"},{" LOGDATE":" /日期(1468270785367)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.367"},{" LOGDATE":" /日期(1468270785336)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.336"},{" LOGDATE":" /日期(1468270785227)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.227"},{" LOGDATE":" /日期(1468270785196)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.196"},{" LOGDATE":" /日期(1468270785164)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12   06:59:45.164"}],"成功":真," TOTALCOUNT":5648}

尝试本地导入到pandas中会直接失败并出现错误:' ValueError:将dicts与非系列混合可能会导致模糊排序。'

最终,这是一个脚本,我只想指向远程系统上的Web服务,每天提取一次或两次一小时的日志

1 个答案:

答案 0 :(得分:0)

解决了 - 最后使用ijson加载json文件,只加载我想要的结果值。 示例代码在这里:

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()

实时版本从具有一些参数的服务器获取json以指定日期范围。