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

Pandas resample.plot()报错:'DatetimeIndexResampler'对象无plot属性

解决Pandas resample后调用plot()报错的问题

报错原因

这个AttributeError是因为新版本Pandas(1.0+)不再支持直接对DatetimeIndexResampler对象调用plot(),教程里的代码大概率基于旧版本Pandas编写——旧版本允许跳过聚合步骤直接绘图,但新版本中resample()仅生成重采样规则对象,未执行实际计算,因此没有plot属性。

修复方案

必须先对重采样对象执行聚合操作(如取每月末收盘价、月均值等),得到可绘图的Series/DataFrame后再调用plot()。

基础修复代码(单折线图)

如果只需要每月收盘价的汇总折线(比如每月最后一个交易日的收盘价):

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

bitcoin = pd.read_csv('BTC-EUR.csv', index_col='Date', parse_dates=True) 

# 先聚合(last()取每月最后一个Close值),再绘图
bitcoin.loc['2019', 'Close'].resample('M').last().plot()
plt.show()

还原教程的“按月拆分彩色折线图”

如果要实现教程里每个月一条彩色折线的效果,用groupby结合月份分组更可靠,兼容所有新版本Pandas:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

bitcoin = pd.read_csv('BTC-EUR.csv', index_col='Date', parse_dates=True) 
# 筛选2019年Close数据,按月份分组
monthly_data = bitcoin.loc['2019', 'Close'].groupby(pd.Grouper(freq='M'))

# 遍历每个月的数据绘制折线
for month, values in monthly_data:
    # 用当月的日期字符串做图例,x轴显示当月的天数
    plt.plot(values.index.day, values, label=month.strftime('%Y-%m'))

plt.legend(title='Month')
plt.xlabel('Day of Month')
plt.ylabel('BTC-EUR Close Price')
plt.show()

额外验证步骤

  1. 检查Pandas版本:运行print(pd.__version__),确认是否为1.0+版本;
  2. 验证索引类型:运行print(bitcoin.index.dtype),确保输出为datetime64[ns]——如果不是,说明parse_dates=True没生效,可手动转换:bitcoin.index = pd.to_datetime(bitcoin.index)。

内容的提问来源于stack exchange,提问作者Eithan Nakache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:16