【发布时间】:2020-01-24 16:28:10
【问题描述】:
我正在处理一些 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 = 即使只有 1 个字典也完全失败。没有创建字典,因为它正在与键作斗争,即使每个字典都是单独处理的:
for d in resp_dict :
x= d.to_dict()
pandas_df = Select.from_dict(x).to_pandas()
print(pandas_df)
特别是,收到的错误与没有制作字典的事实有关,因此 ['took'] 不是键。
Pandas (pd.Dataframe.from_records()) = 只给了我第一个聚合,一列包含内部字典,并在其上使用 pd.apply(pd.Series) 给出了另一个结果字典表。
StackOverflow 发布 recursive function = 字典看起来与使用的示例完全不同,除非我彻底改变输入,否则修修补补让我无处可去。
【问题讨论】:
标签: python pandas dataframe elasticsearch