用NaN替换数据帧中的负值,用fillna方法替换NaN

时间:2015-04-20 09:38:49

标签: python pandas

我想替换数据框列中的否定条目。 我将值设置为NaN,然后​​应用fillna方法。

包含否定条目的数据框的一部分如下所示

print df_sel.P_L_Bef_2.loc[67141:67143]

67141    96745
67142   -20625
67143    96745
Name: P_L_Bef_2, dtype: float64

下一部分是我怀疑错误的地方。虽然我已经阅读了一些关于分配给副本而不是视图的问题,但我认为使用.loc可能会解决这个问题。

df_sel.loc[df_sel.P_L_Bef_2 < 0] = np.nan
print df_sel.P_L_Bef_2.loc[67141:67143]

67141    96745
67142      NaN
67143    96745
Name: P_L_Bef_2, dtype: float64

到目前为止一切顺利。也许!但是......

df_sel['P_L_Bef_2'].fillna(method='ffill')
print df_sel.P_L_Bef_2.loc[67141:67143]

67141    96745
67142      NaN
67143    96745
Name: P_L_Bef_2, dtype: float64

那么,我还在分配一份副本,还是填写方法,而不是我期待的呢?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您没有看到差异,因为默认情况下它不会在原地执行此操作,因此您需要分配结果:

df_sel['P_L_Bef_2'] = df_sel['P_L_Bef_2'].fillna(method='ffill')

或设置inplace = Truefillna的文档显示了它需要的args和默认的param值。因此设置inplace = True也应该有效:

df_sel['P_L_Bef_2'].fillna(method='ffill', inplace=True)