使用文件中的JSON对象集合生成数据框

问题描述 投票:0回答:2

我有一个日志文件,其中每一行都是日志记录,例如:

{"log":{"identifier": "x", "message": {"key" : "value"}}}

[我想将这个JSON集合转换为单个DataFrame进行分析。范例

identifier  |    key
------------|-------------
    x       |   value

到目前为止,我已完成以下操作

     with open("../data/cleaned_logs_xs.json", 'r') as logfile:
        for line in logfile:
            jsonified = json.loads(line)
            log = jsonified["log"]
            df = pd.io.json.json_normalize(log)
            df.columns = df.columns.map(lambda x: x.split(".")[-1])

逐行读取此文件,将每条记录转换为一个DataFrame并将该DataFrame附加到父DataFrame。在此循环的最后,它将构建我需要的最终DataFrame。

现在,我知道这是非常容易出错且效率低下的。最好的方法是什么?

python json pandas
2个回答
0
投票

我不知道这到底是不是您想要的,但是有这样的东西:

import json
from pandas.io.json import json_normalize

my_json = '{"log": {"identifier": "x", "message": {"key": "value"}}}'
data = json.loads(my_json)
data = json_normalize(data)
print(data)

输出:

  log.identifier log.message.key
0              x           value

在您的情况下,只需读取json文件。


0
投票

目前,我已删除了附加到父数据帧的常量。我通过循环将JSON编码的日志消息附加到数组中,最后使用以下命令将JSON记录的数组转换为数据框:

   log_messages = list()
   for line in logfile:
       jsonified = json.loads(line)
       log = jsonified["log"]
       log_messages.append(log)
   log_df = pd.DataFrame.from_records(log_messages)

可以进一步优化吗?

© www.soinside.com 2019 - 2024. All rights reserved.