You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保留列名前缀,将Pandas中含字典的列展开为多列

如何展开DataFrame中存储字典格式的列?

步骤1:导入依赖库

需要用到pandas处理DataFrame,以及ast模块安全地将字符串转为字典(避免直接用eval带来的安全风险):

import pandas as pd
import ast

步骤2:构造示例数据(模拟你的输入)

data = {
    'col1': ['a', 'b', 'c'],
    'col2': ["{'key_1': '1a', 'key_2': '2a'}", "{'key_1': '1b', 'key_2': '2b'}", "{'key_1': '1c', 'key_2': '2c'}"],
    'col3': ["{'key_3': '1a', 'key_4': '2a'}"] * 3
}
df = pd.DataFrame(data)

步骤3:将字符串格式的字典转为真实字典对象

遍历需要处理的列(这里是col2和col3),用ast.literal_eval解析字符串:

# 处理col2
df['col2'] = df['col2'].apply(ast.literal_eval)
# 处理col3
df['col3'] = df['col3'].apply(ast.literal_eval)

步骤4:展开字典列并拼接结果

对每个字典列,用pd.DataFrame将其展开为新的子DataFrame,并用add_prefix给列名加上原列名前缀,最后和原DataFrame的非字典列拼接:

# 展开col2并添加前缀
col2_expanded = pd.DataFrame(df['col2'].tolist()).add_prefix('col2_')
# 展开col3并添加前缀
col3_expanded = pd.DataFrame(df['col3'].tolist()).add_prefix('col3_')
# 拼接原列col1和展开后的列
df_res = pd.concat([df['col1'], col2_expanded, col3_expanded], axis=1)

执行后得到的df_res就是目标结果:

col1 col2_key_1 col2_key_2 col3_key_3 col3_key_4
0    a         1a         2a         1a         2a
1    b         1b         2b         1a         2a
2    c         1c         2c         1a         2a

批量处理多列的优化方案

如果有大量需要处理的字典列,可以用循环简化代码:

# 定义需要处理的列列表
dict_cols = ['col2', 'col3']
# 初始化结果,先保留非字典列
result = df.drop(dict_cols, axis=1)

for col in dict_cols:
    # 解析字符串为字典,展开并添加前缀
    expanded = pd.DataFrame(df[col].apply(ast.literal_eval).tolist()).add_prefix(f'{col}_')
    # 拼接到结果中
    result = pd.concat([result, expanded], axis=1)

内容的提问来源于stack exchange,提问作者kostya ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:30:38