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

Python中如何以时间段为参数绘制线图及解决Period类型对比报错

报错原因
  • 变量维度不匹配:month是和原始数据集Ventes_df行数一致的序列,而ca_mensu是按月聚合后的汇总结果,行数等于不同月份的数量,二者长度不一致无法一一对应
  • 传参规则错误:使用sns.lineplot指定data参数时,x/y/hue参数默认需要传入data内部的列名字符串,直接传入外部独立的Series会导致seaborn匹配索引时,出现Period类型和整数类型无法比较的问题
解决方案

第一步:先完成数据聚合,生成绘图专用的汇总表

# 按年份、月份分组聚合销售额,保留后续绘图需要的字段
Ventes_agg = Ventes_df.groupby(
    [Ventes_df["date"].dt.year.rename("year"), 
     Ventes_df["date"].dt.to_period("M").rename("month")]
)["price"].sum().reset_index(name="ca_mensu")

# 可选操作:将Period类型的月份转为时间戳,更适合时间轴展示
Ventes_agg["month"] = Ventes_agg["month"].dt.to_timestamp()

第二步:调用seaborn绘图,直接传入聚合后的数据集

import seaborn as sns
import matplotlib.pyplot as plt

# 直接指定数据集内的列名即可
sns.lineplot(data=Ventes_agg, x="month", y="ca_mensu", hue="year")

# 优化x轴标签展示,避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

补充说明:如果不需要x轴显示为时间格式,也可以将month转为字符串类型,代码为Ventes_agg["month"] = Ventes_agg["month"].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:24:03