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
相关产品推荐
相关产品推荐

