用 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
抱歉,如果这个问题对新手来说太过分了,但我一直在寻找答案,但我没有找到。
所以,我有一个包含很多 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