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

如何在Pandas中展开列内嵌套字典列表 生成符合要求的DataFrame

实现方案

我们可以通过拆分列表+序列化字典两个步骤完成嵌套结构展开,完整代码如下:

import pandas as pd

# 你的原始数据
fear_speech_data = {'message_text': '*प्रशासक समिति*',
'translated_text': '* Administrator ',
'annotation_list': ['Fear speech', 'Fear speech', 'Normal'],
'propagation': [{'group_id': 9087,
'user_id': 229869,
'timestamp': 1538130086000},
{'group_id': 7, 'user_id': 215, 'timestamp': 1550186113000}]}

# 第一步:生成初始DataFrame,将单条数据包裹为列表避免按行转置
df = pd.DataFrame([fear_speech_data])

# 第二步:拆分propagation列表为单独的列,2个元素对应2个列名,元素数量变化可对应调整列名数量
df[['prop_1', 'prop_2']] = pd.DataFrame(df['propagation'].tolist(), index=df.index)

# 第三步:展开每一个嵌套字典的字段
# 不需要区分传播链路、保留重复列名用这段:
prop1_df = pd.json_normalize(df['prop_1'])
prop2_df = pd.json_normalize(df['prop_2'])

# 需要区分不同链路避免重复列名异常,把上面两行替换为下面这段即可:
# prop1_df = pd.json_normalize(df['prop_1']).add_suffix('_1')
# prop2_df = pd.json_normalize(df['prop_2']).add_suffix('_2')

# 第四步:合并所有列得到最终结果
final_df = pd.concat([df.drop(['prop_1', 'prop_2'], axis=1), prop1_df, prop2_df], axis=1)

通用适配写法(适用于propagation字典数量不固定的场景)

如果数据中propagation字段包含的字典数量不统一,可以用以下代码自动适配:

# 自动拆分所有propagation元素
prop_df = pd.DataFrame(df['propagation'].tolist(), index=df.index)
expanded_props = []
for col in prop_df.columns:
    expanded = pd.json_normalize(prop_df[col])
    # 需要后缀区分就取消注释下一行
    # expanded = expanded.add_suffix(f'_{col+1}')
    expanded_props.append(expanded)
# 合并得到最终结果
final_df = pd.concat([df] + expanded_props, axis=1)

内容的提问来源于stack exchange,提问作者Alex Kujur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:01