按周/月间隔展示销售数据遇异常:图表绘制问题求助
问题解决步骤
核心问题
你把日期转成了字符串格式(DD-MM-YYYY),导致pandas无法识别为时间序列,resample自然无法按时间间隔正确聚合;直接绘图拥挤是因为原始数据时间点太密集,需要先聚合到周/月级别。
步骤1:修复日期类型
首先确保Date列是datetime64类型,而非字符串:
- 若还未转换日期,直接保留datetime对象:
# 转换YYYY-WW为datetime,不转成字符串 data['Date'] = data['Date'].apply(lambda x: week_to_date(x))
- 若已转成字符串,再转回datetime:
import pandas as pd # 按DD-MM-YYYY格式解析字符串为datetime data['Date'] = pd.to_datetime(data['Date'], format='%d-%m-%Y')
步骤2:正确时间聚合
设置datetime索引后,用resample按周/月聚合,注意选对聚合函数(销量用sum而非count——count是统计非空行数,不是销量总和):
# 设置datetime索引 data.set_index('Date', inplace=True) # 按周聚合销量(求和) weekly_data = data.resample('W')['Sales Volume'].sum() # 按月聚合销量(求和) monthly_data = data.resample('M')['Sales Volume'].sum()
步骤3:绘制清晰的图表
聚合后的数据点稀疏,不会拥挤,同时优化x轴显示:
import matplotlib.pyplot as plt # 绘制周销量图表 plt.figure(figsize=(12, 6)) plt.plot(weekly_data.index, weekly_data, label='Weekly Sales', marker='o', linestyle='-') plt.xlabel('Date') plt.ylabel('Sales Volume') plt.title('Weekly Sales Volume') plt.xticks(rotation=45) # 旋转x轴标签,避免重叠 plt.legend() plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show() # 绘制月销量图表 plt.figure(figsize=(12, 6)) plt.plot(monthly_data.index, monthly_data, label='Monthly Sales', marker='s', linestyle='--', color='orange') plt.xlabel('Date') plt.ylabel('Sales Volume') plt.title('Monthly Sales Volume') plt.xticks(rotation=45) plt.legend() plt.tight_layout() plt.show()
常见误区说明
resample只认datetime索引:字符串索引会被当成普通类别,无法按时间间隔分组- 聚合函数要匹配场景:销量数据用
sum累加,求平均值用mean,count仅用于统计数据行数,不适合销量计算 - 图表拥挤的本质:原始数据时间点过多,聚合到周/月后每个间隔仅一个数据点,自然不会拥挤
内容的提问来源于stack exchange,提问作者meg
相关产品推荐
相关产品推荐

