2015-03-30 161 views
7

我找不到一个pandas函数(我曾经见过),用一个数据帧中的NaN替换另一个数据帧中的值(假设可以指定一个通用索引)。任何帮助?熊猫从另一个数据帧中填充数据帧中的缺失值

+0

声音就像你想要合并。请显示一些示例场景。 – 2015-03-30 22:21:38

+0

找到了!我想使用combine_first – user308827 2015-03-30 22:22:40

+1

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.combine_first.html – user308827 2015-03-30 22:22:43

回答

11

如果你有两块形状相同的DataFrames,则:

df[df.isnull()] = d2 

会做的伎俩。

visual representation

只有在df.isnull()计算为True(绿色高亮显示)的位置将有资格获得分配。

实际上,DataFrame并不总是相同的大小/形状,并且转换方法(尤其是.shift())很有用。

进来的数据总是肮脏,不完整或不一致。参加课程。有一个相当广泛的熊猫tutorial and associated cookbook处理这些情况。

5

正如我刚才了解到,有一个DataFrame.combine_first()方法,其目的正是这个,与附加属性,如果你的更新数据帧d2是大于你原来df,额外的行和列加,以及。

df = df.combine_first(d2) 
3

DataFrame.combine_first()准确回答这个问题。

但是,有时要填充/替换/从数据帧B.这个问题把我带到这个网页值覆盖一些数据帧A的非缺失(非NAN)值的,解决的办法是DataFrame.mask()

A = B.mask(condition, A) 

condition为真时,将使用来自A的值,否则将使用B的值。

例如,你可以解决了OP的原题与mask这样,当从A的元素是不可楠,使用它,否则使用相应的元素,从B.

但使用DataFrame.mask()你可以更换A的值不符合任意标准(小于零?超过100?)与B的值。因此mask更灵活,并且这个问题的矫枉过正,但我​​认为这是值得一提的(我需要它来解决我的问题)。

注意到B可能是一个numpy数组而不是DataFrame也很重要。 DataFrame.combine_first()要求B是数据框,但是DataFrame.mask()只要求B是NDFrame并且其尺寸与A的尺寸相匹配。

相关问题