我有一个大型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]})
我无法找到一种简单的方法,只能在DataFrame的开头删除0.001值,而忽略稍后发生的其他值。
我正在使用的数据集很大,所以我希望避免循环遍历每个变量和每个索引(这是我目前正在做的但是花费的时间太长了。)
有什么想法吗?
答案 0 :(得分:3)
这是一种方法:
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的掩码。