如何提取DataFrame中字典及子字典并生成新DataFrame?
解决方案:展开嵌套字典生成新DataFrame
针对你这个从嵌套字典列提取数据生成指定结构DataFrame的需求,我整理了一套简洁的pandas实现方案,直接就能复用!
完整代码实现
import pandas as pd # 模拟你的原始DataFrame(如果是从文件读取的,替换成pd.read_csv/pd.read_excel即可) raw_data = { 'ID': [1, 2], 'ColumnA': [ {'1': {'Order': '0', 'Result': ''}, '2': {'Order': 'Yellow', 'Result': 'Red'}, '3': {'Order': 'Clear', 'Result': 'Tight'}, '4': {'Order': '1.000-1.030', 'Result': '1.015'}}, {'1': {'Order': '0', 'Result': '1.015'}, '4': {'Order': '1.000-1.030', 'Result': '2.4'}, '5': {'Order': '6.0-7.0', 'Result': ''}, '6': {'Order': 'Negative', 'Result': 'Negative'}, '7': {'Order': 'Negative', 'Result': 'Negative'}, '8': {'Order': 'Negative', 'Result': 'Positive'}, '9': {'Order': 'Negative', 'Result': ''}} ] } df = pd.DataFrame(raw_data) # 核心处理逻辑 # 1. 把每个单元格的字典拆成独立行,同时保留原ID expanded_df = df.explode('ColumnA') # 2. 展开嵌套字典的键值对,提取字典的键作为Column_ID result_df = pd.concat( [ expanded_df[['ID']], # 把嵌套字典里的Order/Result转成列 expanded_df['ColumnA'].apply(pd.Series), # 提取原字典的键作为Column_ID expanded_df['ColumnA'].index.get_level_values(1).rename('Column_ID') ], axis=1 ) # 3. 调整列名和顺序到目标格式 result_df = result_df.rename(columns={'Order': 'Column_Order', 'Result': 'ColumnD_Result'}) result_df = result_df[['ID', 'Column_ID', 'Column_Order', 'ColumnD_Result']] # 输出结果 print(result_df)
关键步骤解释
- 拆分字典行:
explode('ColumnA')会把每个单元格里的嵌套字典拆成单独的行,每一行对应字典中的一个键值对,同时保留原始的ID。 - 展开嵌套结构:用
pd.concat合并三部分数据:原始ID列、字典里的Order/Result值、以及原字典的键(也就是你需要的Column_ID)。 - 格式调整:重命名列名并调整列的顺序,完全匹配你要求的新DataFrame结构,空值会自动保留为空白字符串,和示例结果一致。
内容的提问来源于stack exchange,提问作者Zurooch
相关产品推荐
相关产品推荐

