基于Pandas的月度日期数据统计与柱状图绘制咨询
解决Pandas日期分组统计与柱状图绘制问题
我来帮你搞定这个年月维度的统计和绘图需求!你的核心问题是没把Case_Date转换成标准日期类型并提取年月信息,直接按原始日期分组会得到每天的统计结果,而非你需要的12个年月汇总。下面是完整的实现方案:
步骤1:正确解析日期列
首先要把字符串格式的日期转换成Pandas可处理的datetime类型,这样才能轻松提取年月:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 读取数据(保留你原有的列名清洗逻辑) data = pd.read_csv(r'C:\Users\rmond\Downloads\PS_csvFile1.csv', error_bad_lines=False, encoding="ISO-8859-1", skiprows=6) cols = data.columns cols = cols.map(lambda x: x.replace(' ', '_') if isinstance(x, str) else x) data.columns = cols # 按你的日期格式"01-Jan-2018"解析为datetime类型 data['Case_Date'] = pd.to_datetime(data['Case_Date'], format='%d-%b-%Y')
步骤2:提取年月并分组统计
添加一个新列存储"Jan-2018"格式的年月信息,再按这个列做聚合统计:
场景1:统计每个年月的记录数量
如果需要知道每个月有多少条数据:
# 生成"Jan-2018"格式的年月列 data['Year_Month'] = data['Case_Date'].dt.strftime('%b-%Y') # 按年月分组计数 monthly_counts = data.groupby('Year_Month').size().reset_index(name='Record_Count')
场景2:统计某数值列的每月总量
如果需要统计比如Transaction_Amount这类列的月度总和:
data['Year_Month'] = data['Case_Date'].dt.strftime('%b-%Y') monthly_totals = data.groupby('Year_Month')['Transaction_Amount'].sum().reset_index(name='Total_Amount')
步骤3:绘制12个柱状条的图表
用处理好的统计数据生成清晰的柱状图,这里用seaborn优化视觉效果:
# 设置绘图风格 sns.set_style("whitegrid") # 以记录数量统计为例(总量统计只需替换成monthly_totals) plt.figure(figsize=(12, 6)) sns.barplot(x='Year_Month', y='Record_Count', data=monthly_counts, palette='coolwarm') # 添加图表标题和标签 plt.title('2018 Monthly Record Statistics', fontsize=14) plt.xlabel('Year-Month', fontsize=12) plt.ylabel('Number of Records', fontsize=12) # 旋转x轴标签避免重叠 plt.xticks(rotation=45) # 自动调整布局,防止标签被截断 plt.tight_layout() plt.show()
原代码失效原因说明
你之前的data.groupby('Case_Date').mean().plot(kind='bar')是按每一天分组计算均值,所以会生成大量柱状条,完全不符合你要的年月维度汇总。通过转换日期格式并提取年月,我们才能把数据聚合到你需要的时间粒度上。
内容的提问来源于stack exchange,提问作者Andrew Ramos
相关产品推荐
相关产品推荐

