Заменить NaN в массиве определенным образом - PullRequest
1 голос
/ 10 ноября 2019

У меня есть массив вида (здесь упрощенно): [1,NaN,NaN,7,NaN,27]. Я хочу заменить NaN's значениями, равномерно распределенными между известными значениями, поэтому приведенный выше массив станет [1,3,5,7,17,27]. Есть ли быстрый способ сделать это (без использования некоторых для циклов)? Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019

Функция Pandas dataframe.interpolate () в основном используется для заполнения значений NA в кадре данных или серии

import pandas as pd
import numpy as np

arr = [ 1, np.NaN, np.NaN, 7, np.NaN, 27]
//converting array in series 
print(pd.Series(arr).interpolate(method = 'linear', limit_direction = 'forward'))

Параметры
method = 'linear' : игнорировать индекс и рассматривать значения как одинаковые интервалы.
limit_direction: {'forward', 'backward', 'both'}, по умолчанию 'forward' Если указан предел, последовательные NaNбудет заполнено в этом направлении.
limit: int, необязательно Максимальное количество последовательных NaN для заполнения. Должно быть больше 0.

print(pd.Series(arr).interpolate(method = 'linear', limit_direction = 'forward', limit = 1))
#5 won't  get printed
print(pd.Series(arr).interpolate(method = 'linear', limit_direction = 'backward', limit = 1))
#3 won't get printed

Вы можете попробовать различные варианты в зависимости от ваших требований.

1 голос
/ 10 ноября 2019

Если возможно, используйте pandas, создайте Series, а затем используйте Series.interpolate:

import pandas as pd
import numpy as np

arr = [1,np.NaN,np.NaN,7,np.NaN,27]

print (pd.Series(arr).interpolate().values)
[ 1.  3.  5.  7. 17. 27.]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...