如何高效地展平 elasticsearch_dsl 查询中返回的 JSON 结构?
How to efficently flatten JSON structure returned in elasticsearch_dsl queries?
我正在使用 elasticsearch_dsl 查询和搜索 elasticsearch 数据库。
我要查询的字段之一是地址,其结构如下:
address.first_line
address.second_line
address.city
adress.code
returned 文档将其保存在 JSON 结构中,这样地址就保存在字典中,地址的每个子字段都有一个字段。
我想将其放入一个 (pandas) 数据框中,这样地址的每个子字段就有一列。
直接将地址放入数据框中会得到一列地址字典,并迭代行以手动解压缩(json.normalize()
)每个地址字典需要很长时间(4 天,约 200,000 行)。
从文档中我无法弄清楚如何获得 elasticsearch_dsl 到 return 的扁平化结果。有更快的方法吗?
正在寻找解决这个问题的方法,我遇到了自己的答案,发现它缺乏,所以会用更好的方法更新
具体来说:pd.json_normalize(df['json_column'])
在上下文中:pd.concat([df, pd.json_normalize(df['json_column'])], axis=1)
然后根据需要删除原始列。
去年的原始答案,做同样的事情要慢得多
df.column_of_dicts.apply(pd.Series)
returns 一个 DataFrame,其中的指令被展平了。
pd.concat(df,new_df)
将新列添加到旧数据框。
然后删除原来的column_of_dicts。
pd.concat([df, df.address.apply(pd.Series)], axis=1)
是我实际使用的代码。
我正在使用 elasticsearch_dsl 查询和搜索 elasticsearch 数据库。
我要查询的字段之一是地址,其结构如下:
address.first_line
address.second_line
address.city
adress.code
returned 文档将其保存在 JSON 结构中,这样地址就保存在字典中,地址的每个子字段都有一个字段。
我想将其放入一个 (pandas) 数据框中,这样地址的每个子字段就有一列。
直接将地址放入数据框中会得到一列地址字典,并迭代行以手动解压缩(json.normalize()
)每个地址字典需要很长时间(4 天,约 200,000 行)。
从文档中我无法弄清楚如何获得 elasticsearch_dsl 到 return 的扁平化结果。有更快的方法吗?
正在寻找解决这个问题的方法,我遇到了自己的答案,发现它缺乏,所以会用更好的方法更新
具体来说:pd.json_normalize(df['json_column'])
在上下文中:pd.concat([df, pd.json_normalize(df['json_column'])], axis=1)
然后根据需要删除原始列。
去年的原始答案,做同样的事情要慢得多
df.column_of_dicts.apply(pd.Series)
returns 一个 DataFrame,其中的指令被展平了。
pd.concat(df,new_df)
将新列添加到旧数据框。
然后删除原来的column_of_dicts。
pd.concat([df, df.address.apply(pd.Series)], axis=1)
是我实际使用的代码。