0

我正在使用 elasticsearch_dsl 对弹性搜索数据库进行查询和搜索。

我要查询的字段之一是地址,其结构如下:

address.first_line
address.second_line
address.city
adress.code

返回的文档将其保存在 JSON 结构中,因此地址保存在一个字典中,其中每个地址子字段都有一个字段。

我想将其放入(熊猫)数据框中,以便地址的每个子字段有一列。

直接将地址放入数据框中会给我一列地址字典,并迭代行以手动解包(json.normalize())每个地址字典需要很长时间(4 天,约 200,000 行)。

从文档中我无法弄清楚如何让 elasticsearch_dsl 返回扁平化结果。有没有更快的方法来做到这一点?

4

1 回答 1

0

寻找解决这个问题的方法,我遇到了自己的答案,发现它缺乏,所以会用更好的方法更新

具体来说:pd.json_normalize(df['json_column'])

在上下文中:pd.concat([df, pd.json_normalize(df['json_column'])], axis=1)

然后根据需要删除原始列。

去年的原始答案做同样的事情要慢得多

df.column_of_dicts.apply(pd.Series)返回一个 DataFrame,这些 dicts 被展平。

pd.concat(df,new_df)将新列放到旧数据框中。

然后删除原来的column_of_dicts。

pd.concat([df, df.address.apply(pd.Series)], axis=1)是我使用的实际代码。

于 2020-01-13T15:52:30.653 回答