Pandas根据列内字典列表拆分生成新行与新列实现方法
Pandas 列表字典列拆分+字段提取实现方案
核心思路
无需编写多层循环,借助Pandas内置的explode方法先把存储字典列表的列拆分为单元素单行,再从拆分后的字典中提取目标字段即可,代码简洁且运行效率高。
完整实现代码
首先导入Pandas并构造示例原始数据(可直接替换为实际数据源):
import pandas as pd # 原始DataFrame示例 df = pd.DataFrame({ 'Name': ['N001', 'N002', 'N003'], 'Component': [ [{'component':'numpy', 'version':'1.24.0'}, {'component':'pandas', 'version':'2.1.0'}], [{'component':'scikit-learn', 'version':'1.3.0'}], [{'component':'matplotlib', 'version':'3.7.2'}, {'component':'seaborn', 'version':'0.12.2'}, {'component':'plotly', 'version':'5.16.1'}] ] })
第一步:按Component列的列表长度拆分多行
# 拆分列表为独立行,ignore_index重置行索引避免重复 df_processed = df.explode('Component', ignore_index=True)
第二步:提取字典内字段生成新列
# 常规数据量用apply写法即可 df_processed['ComponentName'] = df_processed['Component'].apply(lambda x: x['component']) df_processed['ComponentVersion'] = df_processed['Component'].apply(lambda x: x['version']) # 十万行以上大数据量可替换为性能更好的批量提取写法 # comp_df = df_processed['Component'].apply(pd.Series) # df_processed['ComponentName'] = comp_df['component'] # df_processed['ComponentVersion'] = comp_df['version']
如果不需要保留原存储字典的Component列,追加一行删除即可:
df_processed = df_processed.drop(columns=['Component'])
输出效果说明
处理后每一行唯一对应一个组件:
- 原Name列的值会自动匹配到所属的所有组件行,不会丢失编号关联关系
- ComponentName列存储当前行对应的组件名
- ComponentVersion列存储当前行对应的组件版本号
和需求要求的预期输出结构完全一致。
内容的提问来源于stack exchange,提问作者Rems
相关产品推荐
相关产品推荐

