Python:提取字典列数据并转常规列(剔除末尾特殊字典)
问题解决:提取字典列表中常规字典并转换为表格列
问题背景
现有表格包含dict_vals列,该列存储的字典包含key_a键,对应值为一个字典列表:
- 列表内除最后一个字典外,其余字典的键统一(如
a、b、c) - 末尾字典为特殊字典,键为
a_t、b_t这类特殊命名
需要剔除末尾特殊字典,将剩余字典转换为常规表格列。
解决方案代码
import pandas as pd import json # 1. 解析dict_vals列的JSON数据 table['dict_vals'] = table['dict_vals'].str.replace("'", '"').apply(json.loads) # 2. 提取key_a中除最后一个特殊字典外的所有常规字典 table['regular_dicts'] = table['dict_vals'].apply(lambda x: x['key_a'][:-1]) # 3. 将字典列表展开为常规列 # 先把列表拆成单行,再把字典转成列 expanded_df = table.explode('regular_dicts').reset_index(drop=True) final_df = pd.concat([expanded_df.drop('regular_dicts', axis=1), expanded_df['regular_dicts'].apply(pd.Series)], axis=1) # 4. (可选)单独提取末尾特殊字典的逻辑 table['special_dict'] = table['dict_vals'].apply(lambda x: x['key_a'][-1]) special_df = pd.concat([table.drop('special_dict', axis=1), table['special_dict'].apply(pd.Series)], axis=1)
代码说明
- 修正原代码逻辑:直接在原表格上处理JSON解析,避免额外的列表转DataFrame操作,更高效
x['key_a'][:-1]精准剔除列表最后一个特殊字典,保留所有常规字典项explode方法将字典列表拆分为单独行,apply(pd.Series)把字典的键直接转换为表格列- 通过
pd.concat合并原表格的其他字段与转换后的常规列,保留完整数据链路
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

