将NumPy字符串数组转换为兼容Matplotlib的datetime对象遇问题求助
解决方案
针对你的NumPy字符串日期数组转Matplotlib兼容datetime对象的问题,以下是几种可行的解决方法:
方法1:向量化datetime.strptime批量处理
from datetime import datetime import numpy as np import matplotlib.pyplot as plt t = np.array(['20141017000000','20141017000001','20141017000002'],dtype='<U14') raw_data = np.array([1,2,3],dtype='float') # 用np.vectorize包装strptime,实现数组批量处理 strptime_vec = np.vectorize(lambda x: datetime.strptime(x, '%Y%m%d%H%M%S')) convertedDate = strptime_vec(t) # 绘图验证 plt.plot(convertedDate, raw_data) plt.show()
注意:你之前的格式字符串写错了,正确格式是%Y%m%d%H%M%S,不需要重复字母(比如%YY是错误写法)。
方法2:借助NumPy datetime64转换为Matplotlib兼容格式
import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as dates t = np.array(['20141017000000','20141017000001','20141017000002'],dtype='<U14') raw_data = np.array([1,2,3],dtype='float') # 显式指定转换为秒级datetime64 convertedDate_np = np.array(t, dtype='datetime64[s]') # 转成Matplotlib支持的日期格式 convertedDate = dates.num2date(dates.date2num(convertedDate_np)) plt.plot(convertedDate, raw_data) plt.show()
方法3:用Pandas快速转换(推荐,代码更简洁)
import pandas as pd import matplotlib.pyplot as plt t = np.array(['20141017000000','20141017000001','20141017000002'],dtype='<U14') raw_data = np.array([1,2,3],dtype='float') # Pandas自动处理数组,格式字符串正确即可 convertedDate = pd.to_datetime(t, format='%Y%m%d%H%M%S') plt.plot(convertedDate, raw_data) plt.show()
你之前方法的问题解析
- 选项1:
dates.num2date的作用是将Matplotlib的日期数值(浮点数)转换为datetime对象,不能直接处理字符串数组,因此报错。 - 选项2:
datetime.strptime仅支持单个字符串输入,无法直接处理NumPy数组;同时你使用的格式字符串%YY%mm%dd%HH%MM%ss是错误的,重复的字母不符合格式规范。 - 选项3:直接创建的
np.datetime64对象,Matplotlib对其原生支持不足,内部存储的大整数会导致溢出错误,需要转换为Python原生datetime对象或Matplotlib专用的日期数值格式才能正常绘图。
内容的提问来源于stack exchange,提问作者Darcy
相关产品推荐
相关产品推荐

