如何对 Python 中的 DataFrame 应用掩码?
How to apply a mask to a DataFrame in Python?
我的名为 ds_f 的数据集是一个包含 NaN 值的 840x57 矩阵。我想用线性回归模型预测变量,但是当我尝试拟合模型时,我收到此消息 "SVD did not converge":
X = ds_f[ds_f.columns[:-1]]
y = ds_f['target_o_tempm']
model = sm.OLS(y,X) #stackmodel
f = model.fit() #ERROR
所以我一直在寻找将掩码应用于 DataFrame 的答案。虽然我正在考虑为 "ignore" NaN 值创建一个掩码,然后将其转换为 DataFrame,但我得到了与 ds_f 相同的 DataFrame,没有任何变化:
m = ma.masked_array(ds_f, np.isnan(ds_f))
m_ds_f = pd.DataFrame(m,columns=ds_f.columns)
编辑:我已经通过编写 model=sm.OLS(X,y,missing='drop') 解决了这个问题,但是当我显示结果时出现了一个新问题,我只得到 NaN:
您在使用 statsmodels
吗?如果是这样,您可以指定 sm.OLS(y, X, missing='drop')
,以在估计之前删除 NaN
值。
或者,您可能需要考虑插入缺失值,而不是删除它们。
我的名为 ds_f 的数据集是一个包含 NaN 值的 840x57 矩阵。我想用线性回归模型预测变量,但是当我尝试拟合模型时,我收到此消息 "SVD did not converge":
X = ds_f[ds_f.columns[:-1]]
y = ds_f['target_o_tempm']
model = sm.OLS(y,X) #stackmodel
f = model.fit() #ERROR
所以我一直在寻找将掩码应用于 DataFrame 的答案。虽然我正在考虑为 "ignore" NaN 值创建一个掩码,然后将其转换为 DataFrame,但我得到了与 ds_f 相同的 DataFrame,没有任何变化:
m = ma.masked_array(ds_f, np.isnan(ds_f))
m_ds_f = pd.DataFrame(m,columns=ds_f.columns)
编辑:我已经通过编写 model=sm.OLS(X,y,missing='drop') 解决了这个问题,但是当我显示结果时出现了一个新问题,我只得到 NaN:
您在使用 statsmodels
吗?如果是这样,您可以指定 sm.OLS(y, X, missing='drop')
,以在估计之前删除 NaN
值。
或者,您可能需要考虑插入缺失值,而不是删除它们。