如果我有来自Excel电子表格的数据-格式规定只有更改的行才填充第一列(其他条目为空白)。然后假定该值在接下来的N行中保持,直到该值再次更改。在
因此,熊猫进口如下所示-这里没有惊喜:
动物
类别
NaN
NaN
NaN
狗
NaN
NaN
奶牛
NaN
我需要用最后一个有效值替换NaNs,因此在上面的示例中:
动物
类别
类别
类别
类别
狗
狗
狗
奶牛
奶牛
我想出了以下,假设列名是动物:
在动物。哪里(~df.Animal.isnull(), df.动物.移位())
如果Pandas按顺序运行,那么前面的“animal”应该总是被填充,但是当我运行这个程序时,我看到只有代表猫、狗和牛的第一个NaN被更新,其他NaN则保留下来。在
如果我用一个硬编码的字符串替换shift(),它就可以工作了,所以逻辑看起来不错。在
我认为这意味着Pandas没有严格的顺序运行,可能是在并行地执行map操作。在
在这种情况下(或者如果我做错了什么事),我该怎么做?在
谢谢!在
菲尔。在
你可以试试^{} :
这相当于
^{pr2}$fillna(method='ffill')
:编辑:要进一步回答您的问题,请考虑以下几点:
首先,找到
df['Animal']
为空的位置:让我们看看如果我们用1s替换这些空值会发生什么:
好吧,这很有道理。那么,为什么用
df.Animal.shift()
替换不起作用呢?在行
df.Animal.where(~df.Animal.isnull(), df.Animal.shift())
不起作用,因为正如您在上面看到的,索引2、3等处的Animal
的值是NaN
。它们不是动态更新的,就像你认为的那样。您的代码行正在将df['Animal']
中的NaN
值替换为该特定索引处的相应移位值。这就是为什么“Cat”只填充一次,因为移位列中的下一个值是NaN
。在如果您仍然不确定,请尝试遍历代码行的每个步骤,并查看每个参数的对象是什么,就像我上面所做的那样。在
相关问题 更多 >
编程相关推荐