问题描述
很抱歉,对于新手来说,这个问题似乎也是如此,但我一直在寻找找不到的答案。
因此,我有一个包含许多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数组来完成这项工作,而我的尝试是将数组设置为dict,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,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
y_pred = [25,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