векторизация панд: извлекать несколько фреймов данных и объединять их вместе - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно извлечь кадры данных из данных 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, но я полагаю, что это также не даст большой производительности, поскольку в любом случае новый фрейм данных создается в каждой строке.

Как векторизовать этот расчет? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...