使用NaN将Matplitlib日期数组转换为Datetime对象

时间:2019-06-21 20:36:19

标签: python python-2.7 numpy matplotlib

我有成千上万个具有不规则数据的文件,试图将其插值到同一网格中。数据存储在各个numpy数组中,存储着许多不同的变量和时间。我一直在使用matplotlib.dates通过将时间转换为数字来对时间进行插值。但是由于我不想外插丢失的数据,因此内插在数据集中引入了np.nan值,这使得从matplotlib日期到datetime对象的转换变得棘手,因为我需要保存形状(即无法删除np.nans),但是md.num2date无法处理屏蔽的数组或np.nan

另一个库中是否存在另一个可以解释md.date2num的命令,例如md.num2datenan?还是这里唯一的解决方案是for循环?

import numpy as np
import matplotlib.dates as md

tdata = np.array([np.nan, np.nan, 736926.9827155,736926.98274578,736926.98276768,736926.98285067,736926.9828712])

#Allows num2date to work but removes the nan values and won't conserve shape
test1 = md.num2date(tdata[~np.isnan(tdata)])

print(len(tdata),len(test1))

#Using a mask will produce an error 
#test2 = md.num2date(np.ma.masked_array(tdata,np.isnan(tdata)))

请注意,我需要形状相同并且np.nan可以出现在数组中的任何位置。我正在使用python 2.7

1 个答案:

答案 0 :(得分:2)

也许是这样吗?

test1 = np.full_like(tdata, np.nan, dtype=object)
test1[~np.isnan(tdata)] = md.num2date(tdata[~np.isnan(tdata)])