我找不到一个pandas函数(我以前见过)用数据框中的NaN替换另一个数据帧的值(假设可以指定一个公共索引).有帮助吗?
Jon*_*ice 24
如果您有两个相同形状的DataFrame,那么:
df[df.isnull()] = d2
Run Code Online (Sandbox Code Playgroud)
会做的伎俩.

只有df.isnull()评估的位置True(以绿色突出显示)才有资格进行分配.
实际上,DataFrames的大小/形状并不总是相同,转换方法(特别是.shift())也很有用.
进入的数据总是很脏,不完整或不一致.参加课程.有一个非常广泛的熊猫教程和相关的食谱来处理这些情况.
piR*_*red 15
这应该很简单
df.fillna(d2)
Run Code Online (Sandbox Code Playgroud)
Ana*_*ory 13
正如我刚才所了解的那样,有一种DataFrame.combine_first()方法正是如此,其附加属性是,如果更新数据框d2大于原始数据框df,则还会添加其他行和列.
df = df.combine_first(d2)
Run Code Online (Sandbox Code Playgroud)
Erf*_*fan 10
一个专门的方法是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
Run Code Online (Sandbox Code Playgroud)
注意NaN相交处的更新值aaa, A和eee, B
DataFrame.combine_first()完全回答了这个问题.
但是,有时您希望使用DataFrame B中的值填充/替换/覆盖DataFrame A的一些非缺失(非NaN)值.该问题将我带到此页面,解决方案是DataFrame.mask()
A = B.mask(condition, A)
Run Code Online (Sandbox Code Playgroud)
如果condition为true,将使用A中的值,否则将使用B的值.
例如,你可以解决OP的原始问题mask,当A中的元素是非NaN时,使用它,否则使用来自B的相应元素.
但是使用DataFrame.mask()你可以用B中的值替换不符合任意条件(小于零?超过100?)的A的值.所以mask更灵活,并且对这个问题有点过分,但我认为它值得一提(我需要它来解决我的问题).
同样重要的是要注意B可能是一个numpy数组而不是DataFrame.DataFrame.combine_first()要求B是一个DataFrame,但DataFrame.mask()只要求B是一个NDFrame,其尺寸与A的尺寸相匹配.