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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:33