处理 pandas python 中的缺失数据
working with missing data in pandas python
我有一个以 x 和 y 作为列名的时间序列数据框。在我的数据框中,y 是不完整的系列,x 是完整的系列。我试图在 x 和 y 之间拟合线性回归模型。我的意图是通过使用这个模型来填补数据空白。我的示例代码是:
import statsmodels.formula.api as sm
result = sm.ols(formula="y ~ x", data=df_rg).fit()
df_rg['y'][df_rg['y'].fillna(predict(df_rg['x'])
其中 df_rg 是我的数据框,以日期时间为索引。
我的数据框看起来像:
date x y
1957-07-31 18.845161 NaN
1957-08-31 18.080645 NaN
1957-09-30 16.156667 NaN
1957-10-31 12.324194 NaN
1957-11-30 8.948333 NaN
1957-12-31 6.253226 NaN
.............................
.............................
2015-03-31 8.316129 20.088710
2015-04-30 10.408333 22.203333
2015-05-31 14.832258 25.258065
2015-06-30 16.815000 26.453333
2015-07-31 18.141935 26.835484
2015-08-31 18.450000 26.637097
2015-09-30 17.016667 26.513333
2015-10-31 11.898387 22.906452
2015-11-30 9.133333 19.376667
2015-12-31 5.366129 14.441935
也许使用不带 NA 值的数据框进行拟合,使用 pandas.DataFrame.dropna
?
import statsmodels.formula.api as sm
result = sm.ols(formula="y ~ x", data=df_rg.dropna()).fit()
df_rg['y'] = df_rg['y'].fillna(predict(df_rg['x']))
我有一个以 x 和 y 作为列名的时间序列数据框。在我的数据框中,y 是不完整的系列,x 是完整的系列。我试图在 x 和 y 之间拟合线性回归模型。我的意图是通过使用这个模型来填补数据空白。我的示例代码是:
import statsmodels.formula.api as sm
result = sm.ols(formula="y ~ x", data=df_rg).fit()
df_rg['y'][df_rg['y'].fillna(predict(df_rg['x'])
其中 df_rg 是我的数据框,以日期时间为索引。
我的数据框看起来像:
date x y
1957-07-31 18.845161 NaN
1957-08-31 18.080645 NaN
1957-09-30 16.156667 NaN
1957-10-31 12.324194 NaN
1957-11-30 8.948333 NaN
1957-12-31 6.253226 NaN
.............................
.............................
2015-03-31 8.316129 20.088710
2015-04-30 10.408333 22.203333
2015-05-31 14.832258 25.258065
2015-06-30 16.815000 26.453333
2015-07-31 18.141935 26.835484
2015-08-31 18.450000 26.637097
2015-09-30 17.016667 26.513333
2015-10-31 11.898387 22.906452
2015-11-30 9.133333 19.376667
2015-12-31 5.366129 14.441935
也许使用不带 NA 值的数据框进行拟合,使用 pandas.DataFrame.dropna
?
import statsmodels.formula.api as sm
result = sm.ols(formula="y ~ x", data=df_rg.dropna()).fit()
df_rg['y'] = df_rg['y'].fillna(predict(df_rg['x']))