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

Pandas中筛选1月日期索引数据绘制散点子图报错求助

解决方法:修正散点图代码并实现1月数据筛选绘图

我来帮你修正这段代码并解释问题所在~你的代码主要有索引格式处理错误和循环逻辑错误两个核心问题,下面是完整的修正方案:

问题分析

  1. 索引格式问题:你的DataFrame索引是2017_01_31这类字符串,无法直接通过.month获取月份,必须先转换为datetime类型
  2. 循环逻辑错误:你把子图对象的索引和列名、子图一起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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:46