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

如何将Pandas DataFrame中eval_values列的字典拆分为多行

解决Pandas拆分字典列到多行的KeyError问题

问题根源

  1. eval_values列处理错误:你用json.dumps(x)处理该列完全错误——如果这列是单引号格式的字符串字典,json.dumps会把它转成带转义的字符串,导致后续无法解析为指标列;如果已经是Python字典,json.dumps会把它转为字符串,同样无法展开。
  2. 列名大小写/拼写不匹配:原DataFrame列名是eval_metrics、eval_values,但代码里写成了EvaluationMetrics、eval_Values;同时value_vars里的指标名(如falsePositiveRate)和实际字典里的falsepositiverate大小写不一致,导致找不到列。

正确解决方案

先导入ast模块(用于解析字符串格式的Python字典),然后按以下步骤执行:

import pandas as pd
import ast

# 1. 将eval_values转换为Python字典(如果列是字符串格式的字典才需要这步,已是字典则跳过)
df['eval_values'] = df['eval_values'].apply(ast.literal_eval)

# 2. 展开字典列为单独的指标列
expanded_metrics = df['eval_values'].apply(pd.Series)

# 3. 合并原DataFrame的其他列与展开的指标列
df = pd.concat([df.drop('eval_values', axis=1), expanded_metrics], axis=1)

# 4. 打印当前列名,确认指标列的实际名称(避免拼写/大小写错误)
print("当前所有列:", df.columns.tolist())

# 5. 转换为多行格式,确保id_vars和value_vars的列名完全匹配
df = pd.melt(
    df,
    id_vars=['resource_name', 'version_id', 'create_time', 'update_time', 'eval_metrics'],
    # 这里填写实际存在的指标列名,和字典里的键完全一致
    value_vars=['falsepositiverate', 'falsepositivecount', 'truepositivecount', 'precisionAt1', 'precision', 'f1score', 'recall'],
    var_name='metric',
    value_name='value'
)

# 可选:过滤掉空值(部分记录可能缺少某些指标)
df = df.dropna(subset=['value'])

print(df)

额外说明

  • 如果你的eval_values列本来就是Python字典类型,直接删除ast.literal_eval那一行即可。
  • 执行print(df.columns.tolist())是关键,可以帮你确认展开后的指标列名称,避免因大小写、拼写错误导致的KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:00:03