如何将JSON中嵌套的config字段展开为DataFrame独立列?
展开Pandas DataFrame中嵌套JSON字段的方法
尝试用以下代码读取
sof.json为DataFrame:import pandas as pd json_file = 'sof.json' df = pd.read_json(json_file) print(df)结果仅加载了
utcTime、config、sourceID三列,其中config是嵌套JSON,包含toothSettings数组,需要将config内的所有信息展开为DataFrame的独立列。
情况1:将toothSettings数组的每个元素拆分为单独行
适合数组内是独立的牙齿数据(比如每个元素对应一颗牙齿的参数),展开后每条原始记录会根据数组长度拆分为多行:
import pandas as pd # 读取原始JSON数据 df = pd.read_json('sof.json') # 第一步:展开config字段的第一层(拆分出toothSettings以外的键) df_expanded = pd.concat([df.drop('config', axis=1), df['config'].apply(pd.Series)], axis=1) # 第二步:将toothSettings数组的每个元素拆分为单独行 df_exploded = df_expanded.explode('toothSettings').reset_index(drop=True) # 第三步:展开toothSettings内的嵌套参数为独立列 df_final = pd.concat([df_exploded.drop('toothSettings', axis=1), df_exploded['toothSettings'].apply(pd.Series)], axis=1) # 查看结果 print(df_final)
情况2:将固定长度的toothSettings数组拆分为多列
如果每个样本的toothSettings数组长度固定(比如固定有8颗牙齿的数据),可以将数组元素转为带序号的列,再展开嵌套参数:
import pandas as pd # 读取原始数据 df = pd.read_json('sof.json') # 第一步:展开config字段的第一层 df_expanded = pd.concat([df.drop('config', axis=1), df['config'].apply(pd.Series)], axis=1) # 第二步:将toothSettings数组转为带序号的列(tooth_0、tooth_1...) tooth_cols = df_expanded['toothSettings'].apply(pd.Series).add_prefix('tooth_') # 第三步:合并基础列和牙齿列 df_temp = pd.concat([df_expanded.drop('toothSettings', axis=1), tooth_cols], axis=1) # 第四步:展开每个牙齿列内的嵌套参数 df_final = df_temp.copy() for col in tooth_cols.columns: # 展开当前牙齿列的嵌套字段,并添加前缀区分 nested_df = df_final[col].apply(pd.Series).add_prefix(f"{col}_") df_final = pd.concat([df_final.drop(col, axis=1), nested_df], axis=1) # 查看结果 print(df_final)
内容的提问来源于stack exchange,提问作者ITguy
相关产品推荐
相关产品推荐

