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

从字典列表创建DataFrame后绘图报TypeError: no numeric data to plot错误

报错根本原因

你提供的原始字典列表中,每个键对应的值是长度为1的列表而非单个标量数值,pandas生成DataFrame时会将列表整体作为单元格存储,因此所有列的数据类型均为object,绘图方法无法识别非数值类型数据,所以抛出报错。

解决方案

方案1:构造DataFrame前预处理数据

提前把每个字典值中的列表元素提取为标量,再生成DataFrame:

import pandas as pd
import matplotlib.pyplot as plt

my_dict = [{'A': [0.7315847607219574],
  'B': [0.5681159420289855],
  'C': [0.9999999999999997],
  'D': [0.5793801642856945],
  'E': [0.6867350732769776],
  'F': [0.7336804366512104]},
 {'A': [0.4758837897858464],
  'B': [0.4219886317147244],
  'C': [0.6206223617183635],
  'D': [0.3911170612926995],
  'E': [0.5159829508133175],
  'F': [0.479838956092881]},
 {'A': [0.7315847607219574],
  'B': [0.5681159420289855],
  'C': [0.9999999999999997],
  'D': [0.5793801642856945],
  'E': [0.6867350732769776],
  'F': [0.7336804366512104]}]

# 预处理:提取每个列表的第一个元素作为标量值
processed_data = [{key: val[0] for key, val in item.items()} for item in my_dict]
df = pd.DataFrame(processed_data)

# 绘图
df.plot(kind="barh")
plt.show()

方案2:生成DataFrame后转换数据类型

如果已经生成了object类型的DataFrame,可以直接对全列做类型转换:

df = pd.DataFrame(my_dict)
# 每列元素取列表第一个值,转换为float类型
df = df.apply(lambda col: col.str[0].astype('float64'))

df.plot(kind="barh")
plt.show()

两种方案执行后,调用df.dtypes查看可确认所有列均为float数值类型,可正常绘图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:45:04