我是一个新的熊猫用户(截至昨天),并且有时发现它既方便又令人沮丧 .
我目前的沮丧是试图在数据帧的多个列上使用df.fillna() . 例如,我有两组部分重叠的数据(较新的集合和较旧的集合) . 对于我们有新数据的情况,我只是使用它,但如果没有更新的数据,我也想使用旧数据 . 看来我应该能够使用fillna()来填充较旧的列,但是我无法让它工作 .
尝试一个具体的例子:
df.ix[:,['newcolumn1','newcolumn2']].fillna(df.ix[:,['oldcolumn1','oldcolumn2']], inplace=True)
但这并没有像预期的那样起作用 - 数字显示在新的列中,这些列是NaN,但不是旧列中的数据(事实上,查看数据,我不知道它选择的数字在哪里来了来自,因为它们在新旧数据中都不存在) .
有没有办法用DataFrame中其他特定列的值填充DataFrame中特定列的NaN?
2 回答
回答你的问题:是的 . 看看使用fillna的
value
参数 . 与其他数据帧上的to_dict()
方法一起使用 .But to really solve your problem ,看一下DataFrame的update()方法 . 假设您的两个数据帧具有相似的索引,我认为这正是您想要的 .
请注意,除了
(1, A)
之外,df
中的所有NaN
都被替换,因为df2
中的NaN
也是NaN
. 还有一些像(5, B)
这样的值在df
和df2
之间有所不同 . 通过使用overwrite=False
,它保持df
的值 .编辑:基于评论,似乎您正在寻找一个解决方案,其中列名称不匹配两个DataFrames(如果您发布样本数据,它会很有帮助) . 让我们尝试一下,将C和B替换为A列 .
我想如果你花时间去学习大熊猫,你会减少挫折感 . 这是一个庞大的图书馆,所以需要时间 .
fillna
通常用于向前或向后进行观察 . 相反,我会使用np.where
......如果我明白你在问什么 .