Pandas如何将DataFrame Workbooks列JSON值转字符串并拆分多字段
问题说明
Pandas DataFrame中Workbooks列存储了列表包裹的字典结构值,示例数据如下:
Workbooks 0 [{'name': 'Dashboard_5MRecords'}] 1 [{'name': 'Dashboard_5MRecords_PerformanceFIS'}] 2 [{'name': 'Dashboard_5MRecords.twbx'}]
两类处理需求的对应解决方案如下:
需求1:提取name字段转为纯字符串
目标是将列表字典中的name值提取为纯字符串替换原列内容,直接使用apply按索引取值即可:
df['Workbooks'] = df['Workbooks'].apply(lambda item: item[0]['name'])
处理后原Workbooks列的值会直接变为Dashboard_5MRecords、Dashboard_5MRecords_PerformanceFIS这类纯字符串格式。
需求2:拆分字典多字段为独立列
如果列表内的字典包含id等额外字段,例值为[{'name': 'Dashboard_5MRecords','id': '5478994'}],需要将不同键拆分为独立列,可以选择以下两种实现方式:
- 方式1:使用apply展开后拼接
适合简单结构,写法简洁:# 提取列表内字典,展开为多列 expand_columns = df['Workbooks'].apply(lambda item: item[0]).apply(pd.Series) # 将展开的列拼接到原DataFrame df = pd.concat([df, expand_columns], axis=1) # 不需要原Workbooks列可执行删除 # df.drop(columns='Workbooks', inplace=True) - 方式2:使用json_normalize结构化解析
适合字段多、存在嵌套的复杂结构,兼容性更好:import pandas as pd # 提取列表首元素后做标准化解析 expand_df = pd.json_normalize(df['Workbooks'].str[0]) # 拼接回原表 df = pd.concat([df, expand_df], axis=1)
注意:上述方案默认Workbooks列所有行均为长度为1的列表,且列表内字典包含待提取的键。如果存在空值、结构异常的行,需要提前增加异常捕获逻辑,避免触发KeyError或索引错误。
内容的提问来源于stack exchange,提问作者faber soaks
相关产品推荐
相关产品推荐

