用NaN替换数据框中的负值,使用fillna方法将NaN替换成一个值

3

我希望替换数据框中某一列中的负值。 我将这些值设置为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

那么,我是仍在赋值给一个副本,还是fillna方法正在按照我期望的方式运行?

谢谢您的帮助!

1个回答

0

你看不到区别是因为默认情况下它不执行原地操作,所以你需要赋值结果:

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

或者设置 inplace = Truefillna 的文档显示它需要哪些参数和默认参数值。因此,设置 inplace = True 也应该可以:

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

太好了!谢谢EdChum! - MarkusG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接