Мне нужно извлечь кадры данных из данных json, хранящихся в каждой строке исходного кадра данных, и объединить их все вместе. В настоящее время это работает для меня итерации и занимает много лет.
Входные данные - это фрейм данных, содержащий словари JSON:
print(json_table)
json_responce timestamp request
27487 {'explore_tabs.. 2019-07-02 02:05:25 Lisboa, Portugal
27488 {'explore_tabs.. 2019-07-02 02:05:27 Ribeira, Portugal
Поле json_responce разворачивается в фрейм данных:
from pandas.io.json import json_normalize
from ast import literal_eval
json = literal_eval(json_table.loc[0,'json_responce'])
df_normalized = json_normalize(json['explore_tabs'][0]['sections'][0]
['listings'])
, который дает хороший развернутый кадр данных для каждой строки исходного df
Имея 27000 строк в формате json, содержащих df, я перебираю начальный df, который создает новый df на каждом шаге и выполняет константу с final_df, чтобы объединить все данные вместе:
def unwrap_json_and_concat(json_table):
final_df = pd.DataFrame()
for i in json_table.index:
row = literal_eval(json_table.loc[i,'json_responce'])
df = json_normalize(row['explore_tabs'][0]['sections']
[0]['listings'])
final_df = pd.concat([final_df,df])
return final_df
Как и ожидалось, для итерации требуется много времени, причем к концу вычислений происходит значительное замедление из-за увеличения размера final_df.
Я знаю, как создавать функции для apply
, но я полагаю, что это также не даст большой производительности, поскольку в любом случае новый фрейм данных создается в каждой строке.
Как векторизовать этот расчет?
Спасибо!