我正在处理一些ElasticSearch数据,我想从Kibana这样的聚合中生成表。聚合的示例输出如下,基于以下代码:
s.aggs.bucket("name1", "terms", field="field1").bucket(
"name2", "terms", field="innerField1"
).bucket("name3", "terms", field="InnerAgg1")
response = s.execute()
resp_dict = response.aggregations.name.buckets
{
"key": "Locationx",
"doc_count": 12,
"name2": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": "Sub-Loc1",
"doc_count": 1,
"name3": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": "super-Loc1",
"doc_count": 1
}]
}
}, {
"key": "Sub-Loc2",
"doc_count": 1,
"name3": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": "super-Loc1",
"doc_count": 1
}]
}
}]
}
}
在这种情况下,预期产出将是:
现在,我尝试了多种方法,并简要描述了出现的问题:
Pandasticsearch=即使只有一本字典也完全失败。这本字典并没有被创造出来,因为它在与钥匙斗争,即使每本字典都被分开处理:
for d in resp_dict :
x= d.to_dict()
pandas_df = Select.from_dict(x).to_pandas()
print(pandas_df)
特别是,收到的错误与字典没有编出来,因此['take']不是一个键有关。
Pandas(pd.Dataframe.from_records())=只给了我第一个聚合,其中有一列包含内部字典,在它上面使用pd.apply(pd.Series)给出了另一个结果字典表。
堆垛溢水柱
recursive function
这本词典看起来与所用的例子完全不同,除非我彻底改变输入,否则修改不会给我带来任何好处。