我需要从存储在初始数据帧每一行中的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
创建函数,但是由于事实上无论如何每行都会创建一个新的数据框,因此我相信它也不会带来太大的帮助。
如何向量化此计算? 谢谢!