我有一个包含 Windows 10 日志的 Pandas 数据框。我希望这个 pandas df 转换为 JSON。执行此操作的有效方法是什么?
我已经让它生成了一个默认的 pandas df,但是这不是嵌套的。我多么想要它
{
"0": {
"ProcessName": "Firefox",
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0,
"internal_time": 0.0,
"counter": 0
},
"1": {
"ProcessName": "Excel",
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0,
"internal_time": 0.0,
"counter": 0
},
"2": {
"ProcessName": "Word",
"time": "2019-07-12T01:30:00",
"timeFloat": 1562888000.0,
"internal_time": 1.5533333333,
"counter": 0
}
我希望它看起来像这样
{
"0": {
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0,
"internal_time": 0.0,
"Processes" : {
"Firefox" : 0 # ("counter" value),
"Excel" : 0
},
"1": ...
}
最佳答案
在我看来,您想从基于 ['time', 'timeFloat', 'internal_time']
的聚合数据创建 JSON,您可以这样做:
pd.groupby(['time', 'timeFloat', 'internal_time'])
但是,您的示例表明您想要维护索引键(“0”、“1”
等),这与之前陈述的意图相反。
一个时间点的聚合值:
"Firefox" : 0
"Excel" : 0
似乎对应于这些索引键,这些键在您进行聚合时会丢失。
但是,如果您决定使用聚合,代码将如下所示:
# reading in data:
import pandas as pd
import json
json_data = {
"0": {
"ProcessName": "Firefox",
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0,
"internal_time": 0.0,
"counter": 0
},
"1": {
"ProcessName": "Excel",
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0,
"internal_time": 0.0,
"counter": 0
},
"2": {
"ProcessName": "Word",
"time": "2019-07-12T01:30:00",
"timeFloat": 1562888000.0,
"internal_time": 1.5533333333,
"counter": 0
}}
df = pd.DataFrame.from_dict(json_data)
df = df.T
df.set_index(["ProcessName", 'time', 'timeFloat', 'internal_time', 'counter'])
# processing:
ddf = df.groupby(['time', 'timeFloat', 'internal_time'], as_index=False).agg(lambda x: list(x))
ddf['Processes'] = ddf.apply(lambda r: dict(zip(r['ProcessName'], r['counter'])), axis=1)
ddf = ddf.drop(['ProcessName', 'counter'], axis=1).
# printing the result:
json2 = json.loads(ddf.to_json(orient="records"))
print(json.dumps(json2, indent=4, sort_keys=True))
结果:
[
{
"Processes": {
"Excel": 0,
"Firefox": 0
},
"internal_time": 0.0,
"time": "2019-07-12T00:00:00",
"timeFloat": 1562882400.0
},
{
"Processes": {
"Word": 0
},
"internal_time": 1.5533333333,
"time": "2019-07-12T01:30:00",
"timeFloat": 1562888000.0
}
]
关于python - 如何在 Python 中从 pandas 数据框创建嵌套的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040398/