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

如何将DataFrame中含字典列表的Series转换为指定格式DataFrame?

解决方法

方法一:直接用apply处理detail列

遍历detail列的每个字典列表,提取对应字段后用分隔符拼接,直接生成目标列,代码简洁直观:

import pandas as pd

data = [
    {
        "id": 1,
        "detail": [
            {"name": "name1", "type": "type1"},
            {"name": "name2", "type": "type2"},
        ]
    },
    {
        "id": 2,
        "detail": [
            {"name": "name3", "type": "type3"},
            {"name": "name4", "type": "type4"},
        ]
    },
]
df = pd.DataFrame(data)

# 生成拼接后的name和type列
df['detail_name'] = df['detail'].apply(lambda x: ' | '.join([d['name'] for d in x]))
df['detail_type'] = df['detail'].apply(lambda x: ' | '.join([d['type'] for d in x]))

# 保留需要的列
result_df = df[['id', 'detail_name', 'detail_type']]
print(result_df)

输出结果:

id    detail_name    detail_type
0   1  name1 | name2  type1 | type2
1   2  name3 | name4  type3 | type4

方法二:先展开再分组聚合

基于你尝试的pd.json_normalize,先展开所有字典条目,再按id分组拼接,适合需要先对明细做额外处理的场景:

import pandas as pd

data = [
    {
        "id": 1,
        "detail": [
            {"name": "name1", "type": "type1"},
            {"name": "name2", "type": "type2"},
        ]
    },
    {
        "id": 2,
        "detail": [
            {"name": "name3", "type": "type3"},
            {"name": "name4", "type": "type4"},
        ]
    },
]

# 展开detail列表,同时关联原id
details = pd.json_normalize(data, record_path=['detail'], meta=['id'], record_prefix='detail_')

# 按id分组,拼接同组的name和type
result_df = details.groupby('id').agg(
    detail_name=('detail_name', ' | '.join),
    detail_type=('detail_type', ' | '.join)
).reset_index()

print(result_df)

输出结果与方法一完全一致。

注意事项

  • 分隔符可随意替换,只需修改' | '.join中的字符串(比如换成'; '或空格)即可。
  • 方法一适合小数据量场景,代码更精简;方法二更适配大数据量或需要先清洗明细数据的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:42