基于日期列提取年份并绘制列均值折线图:问题与解决
提取年份绘制折线图失败的原因与解决思路
最初代码的错误原因
自定义年份提取函数逻辑冗余且不合理
你写的Extract_year函数存在逻辑漏洞:函数接收参数date但完全未使用,反而每次调用都会遍历整个df["Date"]往全局的year列表追加元素,多次调用会导致列表长度远超数据行数;同时手动用split("-")拆分日期的方式,在日期格式不统一时极易出错,整体效率也远低于Pandas内置的日期处理方法。折线图参数传递逻辑错误
调用sns.lineplot时,y=df['Class'].mean()传递的是整个Class列的全局均值(单一数值),而x=Extract_year(df)传递的是所有年份的列表。这就导致每个年份对应的y值都是同一个全局均值,最终只会画出一条水平直线,完全无法体现各年份的趋势差异。
正确的解决思路
1. 规范提取年份
使用Pandas的DatetimeIndex处理日期是更可靠的方案,它能自动识别标准日期格式,高效提取年份并新增为DataFrame的列:
df['year'] = pd.DatetimeIndex(df['Date']).year
2. 正确调用Seaborn绘制趋势图
当指定data=df,并传入x="year"和y="Class"时,Seaborn会自动按year分组,计算每组Class列的均值,最终绘制出各年份均值的趋势折线,完全符合预期需求:
sns.lineplot(y="Class", x="year", data=df) plt.xlabel("Year",fontsize=20) plt.ylabel("Success Rate",fontsize=20) plt.show()
内容的提问来源于stack exchange,提问作者CartmanBrah
相关产品推荐
相关产品推荐

