矢量化熊猫:提取多个数据帧并连接在一起

最后发布: 2019-07-02 08:12:23


问题

我需要从存储在初始数据帧每一行中的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行包含df的json,我遍历了初始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函数,但是我相信,无论如何,每行都会创建一个新的数据框,因此性能也不会很高。

如何向量化此计算? 谢谢!

}
pandas vectorization