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

如何从含嵌套列的Pandas DataFrame提取数据生成新列?

解决Pandas嵌套列展开问题

原始DataFrame结构

import pandas as pd

a = {'price': [1, 2],
     'nested_column': 
    [[{'key': 'code', 'value': 'A', 'label': 'rif1'},
    {'key': 'datemod', 'value': '31/09/2022', 'label': 'mod'}],
    [{'key': 'code', 'value': 'B', 'label': 'rif2'},
    {'key': 'datemod', 'value': '31/08/2022', 'label': 'mod'}]]}

df = pd.DataFrame(data=a)

期望输出

b = {'price': [1, 2],
    'code':["A","B"],
    'datemod':["31/09/2022","31/08/2022"]}

exp_df = pd.DataFrame(data=b)

尝试过的失败代码

df = pd.concat([df.drop(['nested_column'], axis=1), df['nested_column'].apply(pd.Series)], axis=1)
df = pd.concat([df.drop([0], axis=1), df[0].apply(pd.Series)], axis=1)

正确解决方法

方法一:通过apply转换嵌套结构为字典后展开

核心逻辑是把每行nested_column中的列表转换成{key: value}格式的字典,再转为DataFrame,最后和原表的其他字段拼接:

# 将嵌套列转为字典格式的Series
nested_dict_series = df['nested_column'].apply(lambda x: {item['key']: item['value'] for item in x})
# 转换为DataFrame
nested_df = pd.DataFrame(nested_dict_series.tolist())
# 与原表的price列拼接得到结果
result_df = pd.concat([df['price'], nested_df], axis=1)

方法二:使用json_normalize处理嵌套数据

利用Pandas的json_normalize工具,先将嵌套结构整理为标准字典格式,再提取目标字段:

from pandas import json_normalize

# 把嵌套列转换为可被json_normalize处理的字典结构
normalized_data = json_normalize(df['nested_column'].apply(lambda x: {item['key']: item['value'] for item in x}))
# 拼接price列得到最终结果
result_df = pd.concat([df['price'], normalized_data], axis=1)

两种方法最终生成的result_df均与期望的exp_df结构和内容完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:00:58