我有一个日志文件,其中每一行都是日志记录,例如:
{"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。
现在,我知道这是非常容易出错且效率低下的。最好的方法是什么?
我不知道这到底是不是您想要的,但是有这样的东西:
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文件。
目前,我已删除了附加到父数据帧的常量。我通过循环将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)
可以进一步优化吗?