如何从含嵌套列的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
相关产品推荐
相关产品推荐

