熊猫用np.nan替换前几个0

用户名

我试图用np.nan为每列替换DataFrame的第一个连续0。例如,我要转换:

pd_tmp_start = pd.DataFrame([[0,0],[0,0.3],[1.2,0.4],[0,0]])
print pd_tmp_start

     0    1
0  0.0  0.0
1  0.0  0.3
2  1.2  0.4
3  0.0  0.0

pd_tmp_target = pd.DataFrame([[np.nan,np.nan],[np.nan,0.3],[1.2,0.4],[0,0]])
print pd_tmp_target

     0    1
0  NaN  NaN
1  NaN  0.3
2  1.2  0.4
3  0.0  0.0

所以,我要做的是

pd_tmp_start[pd_tmp_start.cumsum()==0] = np.nan

虽然有效。但是,我得到了警告

/home/myname/anaconda2/lib/python2.7/site-packages/ipykernel/ main .py:1:SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value

知道这样做的正确方法是什么?谢谢。

编辑:由于某种原因,先前的代码不会输出警告,但是当我处理复杂的数据框并执行时 pd_tmp_start[pd_tmp_start().cumsum()==0] = np.nan

警告弹出。

斯科特·波士顿

让我们使用cumprodmask

pd_tmp_start.mask(pd_tmp_start.eq(0).cumprod().astype(bool))

输出:

    0    1
0  NaN  NaN
1  NaN  0.3
2  1.2  0.4
3  0.0  0.0

更新以下评论:

pd_tmp_start.mask(pd_tmp_start.eq(0).cumprod().astype(bool),-9876)

输出:

        0       1
0 -9876.0 -9876.0
1 -9876.0     0.3
2     1.2     0.4
3     0.0     0.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章