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

如何将按年份统计的平均电影时长DataFrame绘制成条形图?(含报错解决)

解决KeyError: 'release_year' 并绘制条形图

错误原因

执行groupby("release_year")["runtime"].mean()后,release_year会自动成为结果DataFrame的索引,而非普通列。所以你尝试用average_film_runtime["release_year"]访问它时,Pandas会在列名中查找该值,自然找不到,触发KeyError。

解决方法

有两种简单的修复方式:

方法1:重置索引,把release_year转回列

生成average_film_runtime后,调用reset_index()方法将索引转为普通列:

average_film_runtime = pd.DataFrame(averages_over_time).reset_index()

之后就能正常用average_film_runtime["release_year"]作为x轴数据。

方法2:直接使用DataFrame的索引作为x轴

既然release_year是索引,直接用average_film_runtime.index获取年份数据即可,无需转列:

plt.bar(average_film_runtime.index, average_film_runtime["runtime"])

完整修改后的代码(绘制条形图)

这里提供方法1的完整代码,同时将原折线图改为你需求的条形图:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
netflix = pd.read_csv('titles.csv')

# 筛选符合条件的电影
movie_filter = netflix[(netflix["type"] == "MOVIE") & 
                       (netflix["runtime"] > 60)]

# 按年份计算平均时长
averages_over_time = movie_filter.groupby("release_year")["runtime"].mean()
average_film_runtime = pd.DataFrame(averages_over_time).reset_index()

# 绘制条形图
plt.bar(average_film_runtime["release_year"], average_film_runtime["runtime"])
plt.xlabel('发行年份')
plt.ylabel('平均电影时长(分钟)')
plt.title('Netflix电影平均时长随年份变化')
plt.xticks(rotation=45)  # 旋转年份标签避免重叠
plt.tight_layout()  # 自动调整布局防止标签截断
plt.show()

若使用方法2,代码可简化为:

import pandas as pd
import matplotlib.pyplot as plt

netflix = pd.read_csv('titles.csv')
movie_filter = netflix[(netflix["type"] == "MOVIE") & (netflix["runtime"] > 60)]
averages_over_time = movie_filter.groupby("release_year")["runtime"].mean()

plt.bar(averages_over_time.index, averages_over_time.values)
plt.xlabel('发行年份')
plt.ylabel('平均电影时长(分钟)')
plt.title('Netflix电影平均时长随年份变化')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

额外提示

  • 不确定DataFrame结构时,可执行print(average_film_runtime.head())查看,能清晰区分列和索引。
  • 旋转x轴标签和调用plt.tight_layout()是为了提升图表可读性,避免年份标签重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:32