Преобразование массива дат Matplitlib в объекты Datetime с NaN - PullRequest
0 голосов
/ 21 июня 2019

У меня есть тысячи файлов с нерегулярными данными, которые я пытаюсь интерполировать в одну и ту же сетку.Данные хранятся в отдельных numpy массивах для различных переменных и времен.Я интерполировал время, используя matplotlib.dates, конвертируя время в числа.Но поскольку я не хочу экстраполировать отсутствующие данные, интерполяция ввела np.nan значения в наборе данных, что делает преобразование из matplotlib даты в datetime объекта сложным, потому что мне нужно сохранить форму (то есть не могу удалить np.nans) но md.num2date не может обработать замаскированные массивы или np.nan.

Есть ли другая команда, например md.date2num и md.num2date, в другой библиотеке, которая может составлять nan с?Или единственное решение здесь - цикл 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 Ответ

2 голосов
/ 22 июня 2019

Может как то так?

test1 = np.full_like(tdata, np.nan, dtype=object)
test1[~np.isnan(tdata)] = md.num2date(tdata[~np.isnan(tdata)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...