如何提取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
相关产品推荐
相关产品推荐

