You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:01