【问题标题】:Replace negative values in dataframe by NaN, replace NaN with fillna method用 NaN 替换数据框中的负值,用 fillna 方法替换 NaN
【发布时间】:2015-04-20 17:42:01
【问题描述】:

我想替换数据框列中的否定条目。 我将值设置为 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 方法是否正常工作?

感谢您的帮助!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您看不到区别,因为默认情况下它不会就地执行此操作,因此您需要分配结果:

    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!
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2018-06-27
    • 2017-12-05
    • 1970-01-01
    • 2021-08-25
    • 2019-09-29
    • 2017-04-22
    • 2018-01-31
    相关资源
    最近更新 更多