如何通过循环将嵌套JSON全部转换为Pandas DataFrame表格
嵌套JSON转DataFrame的解决方法
你之前的问题根源:
- 直接取
full_res[0][0]只会处理第一个字典,自然只得到一行数据; - 循环里每次把新生成的DataFrame赋值给
df,之前的数据会被覆盖,最后只剩最后一行;另外循环条件x <= n有误——列表索引从0开始,长度为n的话索引范围是0到n-1,应该用x < n。
最优方案:无需循环,直接批量处理
pd.json_normalize本身支持传入字典组成的列表,直接把包含所有数据的子列表传进去即可:
import pandas as pd full_res = [ [ { "Col1": "c1v1", "Col2": "C2v1", "Col3": [{"m": "vm1", "n": "vn1", "p": "vp1"}], "col4": [], }, { "Col1": "c1v2", "Col2": "C2v2", "Col3": [{"m": "vm2", "n": "vn2", "p": "vp2"}], "col4": [], }, ] ] # 直接传入full_res[0](所有字典组成的列表) df = pd.json_normalize(full_res[0]) print(df)
运行后就能得到包含所有行的DataFrame,和你预期的结果完全一致。
如果一定要用循环实现
可以先把每个元素生成的小DataFrame存到列表里,最后合并成一个大的DataFrame:
import pandas as pd full_res = [ [ { "Col1": "c1v1", "Col2": "C2v1", "Col3": [{"m": "vm1", "n": "vn1", "p": "vp1"}], "col4": [], }, { "Col1": "c1v2", "Col2": "C2v2", "Col3": [{"m": "vm2", "n": "vn2", "p": "vp2"}], "col4": [], }, ] ] dfs = [] # 遍历full_res[0]里的每个字典 for item in full_res[0]: temp_df = pd.json_normalize(item) dfs.append(temp_df) # 合并所有小DataFrame并重置索引 df = pd.concat(dfs, ignore_index=True) print(df)
或者用修正后的while循环:
import pandas as pd full_res = [ [ { "Col1": "c1v1", "Col2": "C2v1", "Col3": [{"m": "vm1", "n": "vn1", "p": "vp1"}], "col4": [], }, { "Col1": "c1v2", "Col2": "C2v2", "Col3": [{"m": "vm2", "n": "vn2", "p": "vp2"}], "col4": [], }, ] ] dfs = [] n = len(full_res[0]) x = 0 while x < n: temp_df = pd.json_normalize(full_res[0][x]) dfs.append(temp_df) x += 1 df = pd.concat(dfs, ignore_index=True) print(df)
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

