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

使用Matplotlib绘制柱状图时遇TypeError错误求解(已筛选total>400行)

问题分析与解决

你的报错核心原因是传给plt.bar的y轴参数不是单个数值序列,而是包含数组/无效对象的集合,再加上代码里存在冗余逻辑、未定义变量的问题,导致Matplotlib无法解析数据。

先拆解你代码里的几个明显问题:

  1. 已经用pandas筛选出了符合条件的df3,却又重复用numpy读取同一份文件,完全没必要,反而增加了复杂度。
  2. 代码里total和df1两个变量根本没定义,循环里的valuesforlevel = total[levels_values['month']==i]和m = df1都是无效操作,最终total_amount里存的都是错误值。
  3. 用set处理month会打乱原有顺序,而且你已经筛选出了total>400的行,不需要再做多余的分组操作。

简化后的正确代码

直接利用你已经筛选好的df3来绘制柱状图即可,步骤如下:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据并筛选符合条件的行
df2 = pd.read_csv("1.csv", index_col='month')
df3 = df2[df2.total > 400]

# 绘制柱状图
plt.figure(figsize=(10, 6))  # 调整合适的尺寸,不用设50这么大
plt.bar(df3.index, df3['total'], color='teal')

# 添加标签和标题,优化显示
plt.xlabel('月份')
plt.ylabel('总金额')
plt.title('总金额大于400的月份统计')
plt.xticks(rotation=45)  # 旋转x轴标签避免重叠

plt.tight_layout()  # 自动调整布局
plt.show()

代码说明

  • 直接使用筛选后的df3,它的index是month,total列就是你需要的数值,直接传给plt.bar的x和y参数即可。
  • 调整了画布尺寸,避免过大导致显示异常;添加了标签和旋转x轴标签,提升图表可读性。
  • 去掉了冗余的numpy读取和无效的循环逻辑,代码更简洁且逻辑清晰。

如果你的需求是按月份分组求和后筛选总金额大于400的月份,可以再调整代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("1.csv")
# 按月份分组求和
month_total = df.groupby('month')['total'].sum()
# 筛选求和后总金额大于400的月份
filtered_data = month_total[month_total > 400]

# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(filtered_data.index, filtered_data.values, color='teal')

plt.xlabel('月份')
plt.ylabel('总金额')
plt.title('月总金额大于400的统计')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:44:56