保留列名前缀,将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
相关产品推荐
相关产品推荐

