如何合并循环生成的DataFrame?附JSON转DataFrame循环代码
如何合并循环生成的多个DataFrame?
你现在的代码每次循环都会单独输出处理后的df5,要把所有这些小DataFrame合并成一个整体其实很简单,核心思路是先把每个循环生成的df5收集到一个列表里,最后一次性合并整个列表,具体操作如下:
步骤1:初始化一个空列表存储所有小DataFrame
在循环开始前,先创建一个空列表,比如叫all_dfs,专门用来装每次循环生成的df5。
步骤2:修改循环内代码,将df5追加到列表
把原来循环里的print(df5)改成all_dfs.append(df5),这样每处理一个JSON文件,对应的df5就会被存到列表里。
步骤3:循环结束后合并所有DataFrame
用pd.concat()把列表里的所有小DataFrame合并成一个大的DataFrame即可。
修改后的完整代码如下:
import os import json import pandas as pd # 初始化空列表 all_dfs = [] for filename in os.listdir('json1'): with open(os.path.join('json1',filename),'r') as json_data: d=json.load(json_data) df2=pd.io.json.json_normalize(d) df2.columns = df2.columns.map(lambda x: x.split(".")[-1]) df3=pd.io.json.json_normalize(d['Reviews']) df3.columns = df3.columns.map(lambda x: x.split(".")[-1]) df4=pd.concat([df2]*df3.shape[0],ignore_index=True) df5=df4.join(df3) # 把每个df5追加到列表,替代print输出 all_dfs.append(df5) # 合并所有DataFrame final_df = pd.concat(all_dfs, ignore_index=True) # 查看合并后的最终结果 print(final_df)
小提示
为什么用列表收集再一次性合并?因为如果在循环里每次都用pd.concat合并到一个大DataFrame,每次都会复制整个大DataFrame,数据量大的时候会很慢;而先存列表最后合并只需要一次操作,效率会高很多~
内容的提问来源于stack exchange,提问作者ruw011
相关产品推荐
相关产品推荐

