在Pandas中将含字典列表的列拆分为多列的实现方法
Pandas拆分含字典列表的列为多列并保留原关联数据
问题场景
现有DataFrame结构如下:
id | name | servicePlans ------------------------ 1 | xyz | [{'servicePlanId': '1', 'servicePlanName': 'A', 'provisioningStatus': 'X', 'appliesTo': 'User'}, {'servicePlanId': '2', 'servicePlanName': 'B', 'provisioningStatus': 'Y', 'appliesTo': 'User'}, {'servicePlanId': '3', 'servicePlanName': 'C', 'provisioningStatus': 'Z', 'appliesTo': 'User'}] ...
需要将servicePlans列中的字典列表拆分为多列,同时保留id和name的关联,转换为如下结构:
id | name | servicePlanId | servicePlanName | provisioningStatus | appliesTo ----------------------------------------------------------------------------- 1 | xyz | 1 | A | X | User 1 | xyz | 2 | B | Y | User 1 | xyz | 3 | C | Z | User
问题分析
你之前的代码仅单独处理了servicePlans列,丢失了id和name的关联数据,因此只返回了拆分后的四列。
解决方案
先对整个DataFrame执行explode操作保留原列,再拆分字典列并合并:
# 1. 对servicePlans列做展开,保留id和name列 df_exploded = df.explode('servicePlans') # 2. 将servicePlans列的字典转换为结构化DataFrame service_plans_df = pd.DataFrame(df_exploded['servicePlans'].tolist()) # 3. 合并原列与拆分后的列 result = pd.concat([df_exploded[['id', 'name']], service_plans_df], axis=1) # 可选:按servicePlanId去重(根据需求选择) result = result.drop_duplicates(subset=['servicePlanId'])
执行后即可得到包含所有目标列的DataFrame。
内容的提问来源于stack exchange,提问作者Qasim Khan
相关产品推荐
相关产品推荐

