如何将含元组的嵌套字典转换为指定结构的pandas DataFrame
问题描述
如何将如下格式的嵌套字典:
{'00OZ2dKSA5jUfvF': {1: (48947218088,), 2: (48947218089,), 3: (48947218088, 48947218089)}}
转换为如下结构的pandas DataFrame?
| id | combination_id | value |
|---|---|---|
| 00OZ2dKSA5jUfvF | 1 | 48947218088 |
| 00OZ2dKSA5jUfvF | 2 | 48947218089 |
| 00OZ2dKSA5jUfvF | 3 | 48947218088 |
| 00OZ2dKSA5jUfvF | 3 | 48947218089 |
解决方案
方法一:手动构建数据行(逻辑直观)
通过嵌套循环遍历字典的每一层,将每个值拆分为单独的数据行,最后转换为DataFrame:
import pandas as pd # 原始数据 raw_data = {'00OZ2dKSA5jUfvF': {1: (48947218088,), 2: (48947218089,), 3: (48947218088, 48947218089)}} # 存储所有数据行的列表 data_rows = [] for id_str, combo_dict in raw_data.items(): for combo_id, value_tuple in combo_dict.items(): # 遍历元组中的每个值,生成独立行 for val in value_tuple: data_rows.append({ 'id': id_str, 'combination_id': combo_id, 'value': val }) # 转换为目标DataFrame target_df = pd.DataFrame(data_rows) print(target_df)
方法二:利用pandas内置方法(代码简洁)
借助explode等方法,无需手动循环即可完成转换:
import pandas as pd raw_data = {'00OZ2dKSA5jUfvF': {1: (48947218088,), 2: (48947218089,), 3: (48947218088, 48947218089)}} # 外层字典转为DataFrame,拆分出id列和组合数据列 df = pd.Series(raw_data).reset_index(name='combo_data') # 展开组合数据列 df = df.explode('combo_data').reset_index(drop=True) # 将组合数据拆分为combination_id和value列 df[['combination_id', 'value']] = pd.DataFrame(df['combo_data'].tolist(), index=df.index) # 展开value列并清理冗余列 df = df.explode('value').drop('combo_data', axis=1) # 调整列顺序与目标一致 df = df[['id', 'combination_id', 'value']] print(df)
两种方法最终都会输出符合要求的DataFrame,方法一适合理解底层逻辑,方法二更适合处理大规模数据场景。
内容的提问来源于stack exchange,提问作者Gliebster
相关产品推荐
相关产品推荐

