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

Python3中替代matplotlib.dates.strpdate2num处理日期数据的方法

问题描述

我有一个包含日期、bid、ask数据的文本文件GBPUSD1d.txt,数据格式如下:

20130501000000,1.55358,1.55371
20130501000000,1.55357,1.55369
20130501000000,1.55353,1.55367

尝试用以下代码为数据分配变量时:

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import numpy as np

date,bid,ask = np.loadtxt('GBPUSD1d.txt', unpack=True,
                          delimiter=',',
                          converters={0:mdates.strpdate2num('%Y%m%d%H%M%S')})

运行报错:

AttributeError: module 'matplotlib.dates' has no attribute 'strpdate2num'

原教程基于Python2.7,我使用Python3,求符合Python风格的解决方法。

解决方法

mdates.strpdate2num在matplotlib 3.0及以上版本已被移除,Python3环境下可以通过**datetime.strptime解析日期字符串,再用mdates.date2num转换为matplotlib兼容的日期数值**来替代,注意要先把np.loadtxt读取到的字节串解码为字符串。

修改后的完整代码:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
from datetime import datetime

# 读取数据并处理日期格式
date, bid, ask = np.loadtxt('GBPUSD1d.txt', unpack=True,
                           delimiter=',',
                           converters={0: lambda s: mdates.date2num(datetime.strptime(s.decode('utf-8'), '%Y%m%d%H%M%S'))})

# 获取第0个日期数据并打印(测试用)
print(f"第0个日期对应的matplotlib数值:{date[0]}")

说明:

  • s.decode('utf-8'):Python3中np.loadtxt默认将文本读取为字节类型,需解码为字符串才能被datetime.strptime解析
  • datetime.strptime(s, '%Y%m%d%H%M%S'):将字符串按指定格式解析为datetime对象
  • mdates.date2num(dt):将datetime对象转换为matplotlib绘图所需的浮点数格式的日期值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:57:21