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

基于不同日期范围的DataFrame创建并排子图报错求助

基于不同日期范围的DataFrame创建并排子图报错求助

嘿,我看了你的问题和代码,发现两个关键问题导致了报错,还可能让你的时间范围筛选不符合预期,咱们一步步来解决:

问题1:子图索引使用错误

你用plt.subplots(nrows=1, ncols=2)创建的是1行2列的子图布局,返回的axes是一维数组,不是二维的。所以你写axes[0,0]和axes[0,1]会触发IndexError——因为一维数组只能用单个索引值访问,比如axes[0](左图)和axes[1](右图)。

问题2:日期筛选的逻辑与格式问题

你的需求里的时间范围和代码里写的完全对不上:

  • 你要左图展示28/02/2022到09/03/2023的数据,但代码里写的是df['Date'] < '10/03/2022',日期年份和范围都错了
  • 另外,如果你直接用字符串比较日期,很容易出问题(比如不同格式的字符串排序逻辑不对),所以第一步要把Date列转换成datetime类型

修正后的完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的data是原始数据集
df = pd.DataFrame(data)

# 第一步:把Date列转换成datetime类型,指定格式为日/月/年
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

# 第二步:按照需求筛选正确的日期范围
before_bankrupt = df[(df['Date'] >= '2022-02-28') & (df['Date'] <= '2023-03-09')]
after_bankrupt = df[(df['Date'] >= '2023-03-09') & (df['Date'] <= '2023-04-26')]

# 第三步:创建1行2列的子图,可指定图的大小让布局更美观
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4))

# 第四步:分别在两个子图上绘制折线图,指定x轴为Date,y轴为Price
before_bankrupt.plot(x='Date', y='Price', ax=axes[0], title='28/02/2022 - 09/03/2023')
after_bankrupt.plot(x='Date', y='Price', ax=axes[1], title='09/03/2023 - 26/04/2023')

# 加上x轴标签,让图的信息更直观
axes[0].set_xlabel('Date')
axes[1].set_xlabel('Date')

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

关键说明

  • 转换Date列为datetime类型后,日期比较会更准确,不会出现字符串排序的逻辑错误
  • 筛选日期时用&连接条件,并且每个条件要用括号括起来(避免运算符优先级问题)
  • 绘图时明确指定x='Date'和y='Price',确保只绘制你需要的两个字段的关系
  • 加上title和xlabel可以让子图的信息更清晰易懂

备注:内容来源于stack exchange,提问作者Lok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:03:11