【问题标题】:Converting array of Matplitlib dates to Datetime objects with NaN使用 NaN 将 Matplotlib 日期数组转换为 Datetime 对象
【发布时间】:2019-11-04 16:49:38
【问题描述】:

我有数千个包含不规则数据的文件,我试图将它们插入到同一个网格中。数据存储在单独的numpy 数组中,用于许多不同的变量和时间。我一直在使用 matplotlib.dates 通过将时间转换为数字来插入时间。但是因为我不想推断丢失的数据,所以插值在数据集中引入了np.nan 值,这使得从matplotlib 日期到datetime 对象的转换变得很棘手,因为我需要保存形状(即不能删除@ 987654326@) 但md.num2date 无法处理掩码数组或np.nan。

在另一个库中是否有另一个类似md.date2num 和md.num2date 的命令可以解释nans?还是这里唯一的解决方案是 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

【问题讨论】:

    标签: python python-2.7 numpy matplotlib


    【解决方案1】:

    也许是这样的?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2011-09-09
      • 2012-08-13
      • 1970-01-01
      • 2014-11-08
      相关资源
      最近更新 更多