Pandas从另一个数据帧填充数据框中的缺失值

时间:2015-03-30 22:20:15

标签: python pandas

我找不到一个pandas函数(我之前见过)用数据框中的NaN替换另一个数据帧的值(假设可以指定一个公共索引)。有什么帮助吗?

5 个答案:

答案 0 :(得分:20)

如果你有两个相同形状的DataFrame,那么:

df[df.isnull()] = d2

会做的伎俩。

visual representation

只有df.isnull()评估为True的地点(以绿色突出显示)才有资格获得作业。

实际上,DataFrames的大小/形状并不总是一样,转换方法(尤其是.shift())也很有用。

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

答案 1 :(得分:12)

正如我刚才所了解的那样,有一个DataFrame.combine_first()方法正是如此,其附加属性是,如果您的更新数据框d2大于原始df,还添加了其他行和列。

df = df.combine_first(d2)

答案 2 :(得分:5)

DataFrame.combine_first()完全回答了这个问题。

但是,有时您希望使用DataFrame B中的值填充/替换/覆盖DataFrame A的一些非缺失(非NaN)值。这个问题将我带到此页面,解决方案是{{3 }}

A = B.mask(condition, A)

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

例如,您可以使用mask解决OP的原始问题,这样当A中的元素是非NaN时,请使用它,否则使用B中的相应元素。

但是使用DataFrame.mask()你可以用B中的值替换不符合任意条件(小于零?超过100?)的A的值。因此mask更灵活,而且过度杀伤对于这个问题,但我认为值得一提(我需要它来解决我的问题)。

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

答案 3 :(得分:5)

专用的方法是DataFrame.update

引自文档:

使用来自另一个DataFrame的非NA值进行修改。
在索引上对齐。没有返回值。

要注意的是,此方法将就地修改您的数据。因此它将覆盖您更新的数据框。

示例

print(df1)
       A    B     C
aaa  NaN  1.0   NaN
bbb  NaN  NaN  10.0
ccc  3.0  NaN   6.0
ddd  NaN  NaN   NaN
eee  NaN  NaN   NaN

print(df2)
         A    B     C
index                
aaa    1.0  1.0   NaN
bbb    NaN  NaN  10.0
eee    NaN  1.0   NaN

# update df1 NaN where there are values in df2
df1.update(df2)
print(df1)
       A    B     C
aaa  1.0  1.0   NaN
bbb  NaN  NaN  10.0
ccc  3.0  NaN   6.0
ddd  NaN  NaN   NaN
eee  NaN  1.0   NaN

请注意,更新后的NaN值与aaa, Aeee, B相交

答案 4 :(得分:3)

这应该像

一样简单
df.fillna(d2)