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

如何从DataFrame的重复嵌套子段数据中提取内容创建新DataFrame

问题描述
  • 正在准备模型训练所用数据集,原始数据为YAML格式,目前已完成格式转换,成功将数据加载为DataFrame
  • 现存问题:数据内的有效信息以嵌套子段形式存储,无法通过常规列访问方式直接读取
  • 需求:提取包含3个嵌套子段的目标列,基于该部分有效数据创建新的可用DataFrame
  • 数据集头部样例:
    数据集头部样例
解决方案

YAML转换得到的DataFrame中,嵌套子段一般以字典格式存储在单元格内,按以下两种场景选择处理方式即可:

场景1:嵌套列无缺失值、结构统一

直接用apply(pd.Series)拆分嵌套字典为独立列,效率最高,示例代码:

import pandas as pd
import yaml

# 替换为你的原始DataFrame变量名、目标嵌套列名
raw_df = "你的原始DataFrame"
target_col = "存储3个嵌套子段的目标列名"

# 若列内容为YAML字符串格式,先执行这一步做格式转换
# raw_df[target_col] = raw_df[target_col].apply(yaml.safe_load)

# 拆分嵌套列为独立子列
split_cols = raw_df[target_col].apply(pd.Series)
# 按实际子段名称重命名列
split_cols.columns = ["子段1名称", "子段2名称", "子段3名称"]

# 拼接需要保留的其他列,生成最终训练用DataFrame
# 不需要保留其他列的话直接 new_train_df = split_cols 即可
new_train_df = pd.concat(
    [raw_df[["需要保留的非嵌套列1", "需要保留的非嵌套列2"]], split_cols],
    axis=1
)

场景2:嵌套列存在缺失值、子段结构不完全一致

用pandas内置的json_normalize方法做展开,容错性更强,不会因为个别行缺字段直接报错:

import pandas as pd
import yaml
from pandas import json_normalize

raw_df = "你的原始DataFrame"
target_col = "存储3个嵌套子段的目标列名"

# 若列内容为YAML字符串格式,先执行这一步做格式转换
# raw_df[target_col] = raw_df[target_col].apply(yaml.safe_load)

# 自动展开所有嵌套字段为独立列
expanded_df = json_normalize(raw_df[target_col])

# 筛选需要的3个子段,和其他保留列拼接得到最终DF
new_train_df = pd.concat(
    [raw_df.drop(columns=[target_col]), expanded_df[["子段1名称", "子段2名称", "子段3名称"]]],
    axis=1
)

踩坑提示:不要用eval做字符串转字典的操作,存在执行恶意代码的风险,处理YAML格式数据优先用yaml.safe_load做解析。

内容的提问来源于stack exchange,提问作者Angelos Zinonos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:45:37