用 numpy 数组值填充 Pandas 列 NaN

Fill Pandas Column NaNs with numpy array values

抱歉,如果这个问题对新手来说太过分了,但我一直在寻找答案,但我没有找到。

所以,我有一个包含很多 NaN 值的数据集,我一直在研究一些回归来预测这些空值,并且由于预测是作为 numpy.ndarray 给出的,我试图填充那些数组的列间隙没有成功。

我的意思是,专栏是这样的:

           ['Records']
      101       21
      102       22
      103       23 
      104       24
      106       NaN
      107       NaN
      108       NaN
      109       NaN
      110       NaN
      111       29
      112       30

数组为:

   y_pred = [25, 26, 27, 28]

因此,fillna 不处理 numpy 数组来完成这项工作,我尝试将数组设置为字典、pandas 列等,但没有任何效果。

此外,另一个问题是数组的长度总是与原始列不同。

非常感谢您的见解。

首先需要相同数量的缺失值,如数组长度,如果想用数组的所有值替换所有缺失值:

#added value
y_pred = [25, 26, 27, 28, 30]
m = df['Records'].isna()

df.loc[m, 'Records'] = y_pred
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110     30.0
111     29.0
112     30.0

如果可能的长度不匹配创建助手 Series 并按长度过滤并传递给 Series.fillna:

此处数组的长度 < NaN 的数量:

y_pred = [25, 26, 27, 28]

m = df['Records'].isna()

LenNaN = m.sum()
LenArr = len(y_pred)

s = pd.Series(y_pred[:LenNaN], index=df.index[m][:LenArr])
print (s)
106    25
107    26
108    27
109    28
dtype: int64

df['Records'] = df['Records'].fillna(s)
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110      NaN
111     29.0
112     30.0

此处数组的长度 > NaN 的数量:

y_pred = [25, 26, 27, 28, 100, 200, 300]

m = df['Records'].isna()

LenNaN = m.sum()
LenArr = len(y_pred)

s = pd.Series(y_pred[:LenNaN], index=df.index[m][:LenArr])
print (s)
106     25
107     26
108     27
109     28
110    100
dtype: int64

df['Records'] = df['Records'].fillna(s)
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110    100.0
111     29.0
112     30.0