我有一个大的DataFrame对象,其中缺失值被预编码为0.001。这些丢失的值仅出现在DataFrame的开头。例如:

df = pd.DataFrame({'a':[0.001, 0.001, 0.001, 0.50, 0.10, 0.001, 0.75]})


问题是...。有时我不想删除的DataFrame开头没有实际的0.001值(如上例所示)。

我想要的是:

df = pd.DataFrame({'a' :[NaN, NaN, NaN, 0.50, 0.10, 0.001, 0.75]})


我无法找出一种简单的方法来仅将0.001值放在DataFrame的开头,而忽略以后出现的其他值。

我正在使用的数据集非常庞大,因此我希望避免循环遍历每个变量和每个索引(这是我目前正在做的事情,但是花费的时间太长了)。

有任何想法吗?

最佳答案

这是一种方法:

df.mask(df[df!=0.001].ffill().isnull(), np.nan)
Out:
       a
0    NaN
1    NaN
2    NaN
3  0.500
4  0.100
5  0.001
6  0.750


这首先创建一个布尔掩码,其中df不等于0.001。在此选择中,具有0.001的单元格将为NaN。如果向前填充此Series / DataFrame,则不会填充前几个元素。然后,您可以将其用作原始DataFrame的掩码。

关于python - 替换DataFrame中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41108248/

10-12 23:31