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

如何提取DataFrame中指定参数键值并在Python中绘制图表

参数可视化解决方案

1. 现有代码与数据结构

# 定义需可视化的参数列表
param = ["n_neighbors", "window_size","weighted","p","max_depth","grace_period","_max_size","l2"]

# 加载JSON文件至DataFrame
import pandas as pd
df1 = pd.read_json("population_steps.json")

df1是10列、1000行的DataFrame,每个单元格为嵌套字典,通过df1[列索引][行索引]['Classifier'][1]可获取对应位置的分类器参数字典:

  • 执行df1[0][0]['Classifier'][1]返回:{'n_neighbors': 20, 'window_size': 500, 'weighted': True, 'p': 2}
  • 执行df1[1][0]['Classifier'][1]返回:{'max_depth': 60, 'grace_period': 10, '_max_size': 5}

2. 提取参数数据

将所有行、列中的参数值提取并整理为可直接绘图的结构:

import numpy as np

# 初始化字典存储各参数的所有值
param_values = {key: [] for key in param}

# 遍历所有列和行,提取参数值
for col in df1.columns:
    for idx, cell in df1[col].items():
        classifier_params = cell['Classifier'][1]
        # 参数存在则添加值,不存在填充NaN
        for key in param:
            param_values[key].append(classifier_params.get(key, np.nan))

# 转换为DataFrame,全局行号为索引(共10×1000=10000条数据)
param_df = pd.DataFrame(param_values, index=np.arange(10000))

3. 绘制参数趋势图

使用Matplotlib绘制每个参数的变化趋势图,X轴为全局行号,Y轴为参数值:

import matplotlib.pyplot as plt

plt.style.use('seaborn-v0_8')

# 逐个参数生成图表
for key in param:
    plt.figure(figsize=(12, 6))
    plt.plot(param_df.index, param_df[key], marker='o', linestyle='-', markersize=3, alpha=0.6)
    plt.title(f'参数 {key} 随全局行号的变化')
    plt.xlabel('全局行号')
    plt.ylabel(key)
    plt.grid(True)
    # 保存图片或直接显示
    plt.savefig(f'{key}_trend.png', dpi=300, bbox_inches='tight')
    plt.show()

可选调整

  • 若仅需按原始df1的行号(0-999)展示每列数据,可修改遍历逻辑,为每列绘制子图。
  • 对于布尔型参数(如weighted),可转换为0/1数值后绘制,或用散点图展示分布。
  • 若存在大量缺失值,可过滤缺失数据,或用特殊标记标注缺失位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:10:28