以特定方式替换数组中的NaN

时间:2019-11-10 09:01:07

标签: python numpy

我有一个数组的形式(这里简化):[1,NaN,NaN,7,NaN,27]。我想用在已知值之间均等间隔的值替换NaN's,因此上述数组将变为[1,3,5,7,17,27]。有没有一种快速的方法(不使用某些for循环)?谢谢!

2 个答案:

答案 0 :(得分:2)

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。
限制:整数,可选 要填充的连续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 :(得分:1)

如果可能,请使用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.]