在大熊猫中用NaN代替连续的0。

问题描述 投票:1回答:1

我想通过只替换数据帧中的CONSECUTIVE 0来清理一些数据。

鉴于。

import pandas as pd
import numpy as np
d = [[1,np.NaN,3,4],[2,0,0,np.NaN],[3,np.NaN,0,0],[4,np.NaN,0,0]]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd'])
df
   a    b  c    d
0  1  NaN  3  4.0
1  2  0.0  0  NaN
2  3  NaN  0  0.0
3  4  NaN  0  0.0

预期的结果应该是:

   a    b  c    d
0  1  NaN  3   4.0
1  2  0.0  NaN NaN
2  3  NaN  NaN NaN
3  4  NaN  NaN NaN

其中c列& d列受到影响,但b列不受影响,因为它只有一个0(而不是连续的0)。

我已经对这个答案进行了实验。在Pandas DataFrame列中替换超过n个连续的值。

这是对的,但是这个解决方案在给定的列中保留了第一个0,这在我的情况下是不需要的。

pandas
1个回答
1
投票

让我们做 shiftmask

df=df.mask((df.shift().eq(df)|df.eq(df.shift(-1)))&(df==0))
Out[469]: 
   a    b    c    d
0  1  NaN  3.0  4.0
1  2  0.0  NaN  NaN
2  3  NaN  NaN  NaN
3  4  NaN  NaN  NaN
© www.soinside.com 2019 - 2024. All rights reserved.