feg*_*ero 2 regression dataframe pandas sklearn-pandas fillna
很抱歉,如果这个问题对于新手来说似乎太难了,但我一直在寻找答案,但没有找到。
因此,我有一个包含大量 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
Run Code Online (Sandbox Code Playgroud)
该数组是:
y_pred = [25, 26, 27, 28]
Run Code Online (Sandbox Code Playgroud)
因此, 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
Run Code Online (Sandbox Code Playgroud)
如果可能长度不匹配,则创建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
Run Code Online (Sandbox Code Playgroud)
这里数组的长度 > 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2429 次 |
| 最近记录: |