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

如何拆分Pandas列中的字典为新列和行(explode方法无效)

解决Pandas中非标准JSON/字典格式列的拆分问题

你的核心问题是Column C中的数据不符合标准JSON或Python字典格式:字典键未加引号,且存在0d-1这类非标准值格式,导致常规的json.loads和pandas.explode方法无法直接生效。以下是可行的解决方案:

步骤1:编写格式转换函数

先实现一个函数,将非标准的字典字符串转换为合法的Python对象:

import pandas as pd
import re

def fix_nonstandard_data(s):
    # 为无引号的字典键添加双引号
    s = re.sub(r'(\w+):', r'"\1":', s)
    # 将非标准的sal_gp值(如0d-1)转为字符串格式,避免解析报错
    s = re.sub(r'(\b0d-\d+\b)', r'"\1"', s)
    # 转换为Python列表对象
    try:
        return eval(s)
    except Exception as e:
        print(f"转换失败: {e}")
        return []

步骤2:处理原始数据

将转换函数应用到Column C,再拆分行并展开字典列:

# 构造匹配你输入的示例数据
raw_data = {
    'Column A': ['john', 'jack'],
    'Column B': ['blue', 'gold'],
    'Column C': [
        '[{city: "Manhattan", job_type: "PERM", sal_gp: 0d-1, age: 3.4}, {city: "Dallas", job_type: "TEMP", sal_gp: 0d-1, age: 1.4}]',
        '[{city: "San Diego", job_type: "TEMP", sal_gp: 0d-1, age: 5.44}]'
    ]
}

df = pd.DataFrame(raw_data)

# 转换非标准数据格式
df['Column C'] = df['Column C'].apply(fix_nonstandard_data)

# 拆分列表为单独行
df_exploded = df.explode('Column C', ignore_index=True)

# 将字典列展开为多列
df_final = pd.concat(
    [df_exploded.drop('Column C', axis=1), df_exploded['Column C'].apply(pd.Series)],
    axis=1
)

print(df_final)

输出结果

运行代码后将得到你期望的格式:

Column AColumn Bcityjob_typesal_gpage
johnblueManhattanPERM0d-13.4
johnblueDallasTEMP0d-11.4
jackgoldSan DiegoTEMP0d-15.44

注意事项

  • eval()函数存在安全风险,如果数据来自不可信来源,建议改用自定义解析器替代;
  • 若0d-1需要转为数值类型,可在转换后额外添加类型转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:06:22