Pandas中筛选1月日期索引数据绘制散点子图报错求助
解决方法:修正散点图代码并实现1月数据筛选绘图
我来帮你修正这段代码并解释问题所在~你的代码主要有索引格式处理错误和循环逻辑错误两个核心问题,下面是完整的修正方案:
问题分析
- 索引格式问题:你的DataFrame索引是
2017_01_31这类字符串,无法直接通过.month获取月份,必须先转换为datetime类型 - 循环逻辑错误:你把子图对象的索引和列名、子图一起
zip,这完全不符合逻辑——应该先筛选出1月的数据,再遍历x轴列名和对应的子图
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt # 1. 先将字符串索引转换为datetime类型(关键步骤!) df.index = pd.to_datetime(df.index, format="%Y_%m_%d") # 2. 筛选出索引为1月的数据 january_data = df[df.index.month == 1] # 3. 创建1行3列的子图布局 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(14, 4)) # 4. 遍历三个x轴列和对应的子图,绘制散点图 x_axis_columns = ["I_Base", "U_Win", "Occ"] for x_col, ax in zip(x_axis_columns, axes.flat): # 在指定子图上绘制散点图 january_data.plot( kind="scatter", x=x_col, y="Energy", ax=ax, alpha=0.5, # 可以额外添加颜色等参数,比如color='darkblue' ) # 给每个子图添加标题和轴标签,提升可读性 ax.set_title(f"Energy vs {x_col}\n(January Data)") ax.set_xlabel(x_col) ax.set_ylabel("Energy Consumption") # 自动调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键修正点说明
- 索引转换:用
pd.to_datetime指定格式%Y_%m_%d,把字符串索引转为可操作的日期类型,这样才能用.month == 1筛选1月数据 - 提前筛选数据:先生成
january_data,避免绘图时重复筛选,提升效率 - 子图遍历:用
axes.flat遍历子图数组,不管是1行多列还是多行多列布局都能轻松适配 - 图表美化:添加标题和轴标签,用
plt.tight_layout()自动调整间距,让图表更清晰易读
内容的提问来源于stack exchange,提问作者Maryam Nahid
相关产品推荐
相关产品推荐

