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

如何将Timestamp转为字符串以命名并保存Matplotlib绘图文件?

解决Timestamp与字符串拼接的TypeError问题

这个报错的原因很直接:你没法直接把Timestamp对象和字符串'.png'做加法运算。groupby('index_hour')返回的hour是pandas.Timestamp类型,必须先把它转换成符合文件名规范的字符串,才能和后缀拼接。

下面给你几种实用的解决方法:

方法1:用strftime()自定义格式化文件名

strftime()是Timestamp的专属格式化方法,能把时间转成你想要的任意字符串格式,还能避开系统不允许的特殊字符(比如冒号:):

for hour, group in df.groupby('index_hour'):
    # 格式化为"YYYY-MM-DD_HH"的字符串,避免冒号导致的系统兼容性问题
    filename = hour.strftime("%Y-%m-%d_%H") + '.png'
    plt.savefig(filename, dpi=300, bbox_inches='tight')
    plt.close()  # 记得关闭画布,防止内存泄漏

这样生成的文件名会是2019-01-25_17.png这类格式,既清晰又不会触发系统文件名限制。

方法2:转字符串后替换特殊字符

如果你想保留完整的时间戳信息,可以先把Timestamp转成字符串,再替换掉冒号:

for hour, group in df.groupby('index_hour'):
    # 把时间戳转成字符串后,用下划线替换冒号
    hour_str = str(hour).replace(':', '_')
    filename = f"{hour_str}.png"
    plt.savefig(filename, dpi=300, bbox_inches='tight')
    plt.close()

这种方式会生成类似2019-01-25_17_00_00.png的文件名,能完整保留时间戳细节。

方法3:提前处理分组键为字符串

如果不想在循环里处理时间格式,可以提前把分组字段转成字符串格式:

# 先将索引的小时部分格式化为字符串类型的分组键
df['index_hour_str'] = df.index.strftime("%Y-%m-%d_%H")
# 直接用字符串分组键循环,省去格式转换步骤
for hour_str, group in df.groupby('index_hour_str'):
    filename = f"{hour_str}.png"
    plt.savefig(filename, dpi=300, bbox_inches='tight')
    plt.close()

最后提醒一句:循环绘图后一定要用plt.close()关闭每个画布,否则大量未关闭的画布会占用内存,导致程序运行变慢甚至崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:22:01