python - 将嵌套字典结构转换为 Pandas 数据框?
问题描述
我有一个嵌套字典结构列表,如下所示:
{'1278.1':
{'Time Distribution': 'Exponential',
'Time Distribution Parameters': {'Equivalent Lambda': 950.486, 'Average Packet Lambda': 0.950486, 'Exponential Max Factor': 10.0},
'Size Distribution': 'Binomial', x
'Size Distribution Parameters': {'Average Packet Size': 1000.0, 'Packet Size 1': 300.0, 'Packet Size 2': 1700.0}}}
第一个数值(此处显示为'1278.1'
)称为max avg lambda
值。我想创建一个使用以下列格式化的数据框:
Max Avg Lamba
Time Distribution
Equivalent Lambda
Average Packet Lambda
…… Size Distribution
_Packet Size 2
这怎么可能?此外,我正在使用的数据并不总是具有相同的Time Distribution Parameters
or Size Distribution Parameters
。例如,有时可能会出现Packet Size 3
,但并非总是如此。Packet Size 3
当不存在类似的东西时,如何创建其中一些值为空的数据框?
解决方案
这可能已经有了答案
上面链接上的答案说您可以直接向pd.DataFrame
函数输入字典,它会吐出输入字典的数据框。
下面的代码应该正确格式化上面的dict,并将其更改为允许DataFrame方法正确读取的格式。
import copy
import pandas as pd
d = {
"1278.1": {"Time Distribution": "Exponential",
"Time Distribution Parameters": {"Equivalent Lambda": 950.486, "Average Packet Lambda": 0.950486, "Exponential Max Factor": 10.0
},
"Size Distribution": "Binomial",
"Size Distribution Parameters": {"Average Packet Size": 1000.0, "Packet Size 1": 300.0, "Packet Size 2": 1700.0
}
}
}
# Convert to list to get keys(max avg lambdas)
max_avg_lambdas = list(d)
list_of_dicts = []
# If there are more than 1 keys iterate and create new dict
for max_avg_lambda in max_avg_lambdas:
# Create new key/value pair of the max avg lambda inside of Time dist parameters
d[max_avg_lambda]["Time Distribution Parameters"]["Max Avg Lambda"] = max_avg_lambda
# Create a new dict with contents of max_avg_lambda key dict
fixed_dict = copy.deepcopy(d[max_avg_lambda])
# Append dict to a list of dicts
list_of_dicts.append(fixed_dict)
for info_dict in list_of_dicts:
df = pd.DataFrame(info_dict)
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
print(df)
print(fixed_dict)
输出字典
{
"Time Distribution": "Exponential",
"Time Distribution Parameters": {
"Max Avg Lambda": "1278.1",
"Equivalent Lambda": 950.486,
"Average Packet Lambda": 0.950486,
"Exponential Max Factor": 10.0
},
"Size Distribution": "Binomial",
"Size Distribution Parameters": {
"Average Packet Size": 1000.0,
"Packet Size 1": 300.0,
"Packet Size 2": 1700.0
}
}
出去:
Time Distribution Time Distribution Parameters \
Equivalent Lambda Exponential 950.486
Average Packet Lambda Exponential 0.950486
Exponential Max Factor Exponential 10.0
Max Avg Lambda Exponential 1278.1
Average Packet Size Exponential NaN
Packet Size 1 Exponential NaN
Packet Size 2 Exponential NaN
Size Distribution Size Distribution Parameters
Equivalent Lambda Binomial NaN
Average Packet Lambda Binomial NaN
Exponential Max Factor Binomial NaN
Max Avg Lambda Binomial NaN
Average Packet Size Binomial 1000.0
Packet Size 1 Binomial 300.0
Packet Size 2 Binomial 1700.0
推荐阅读
- javascript - 当我的 webapp 收到来自 firebase 的消息时,XMLHttpRequest 不能在 messing.setBackgroundMessageHandler(...) 中用于接收反馈
- instagram-api - Instagram API 数据与 Instgram Insights 数据不匹配
- aws-api-gateway - API Gateway 响应 403 而不是 404
- c# - Func<> 作为函数的可选参数必须是编译时间常数吗?
- javascript - 使用同一个音频对象时多次播放 JavaScript 音频
- c - C - 使用指针时出现 strncpy 段错误
- java - 如何在 Amazon-ECS 实例之间共享连接池
- excel - 无法从宏执行 bat 文件
- python - 安装 Django 并现在运行它说找不到命令
- r - 在带有参数化列名的循环中使用 dplyr