Python 熊猫从另一个数据帧填充数据帧中缺少的值
我找不到pandas函数(我以前见过)来用另一个数据帧中的值替换数据帧中的NaN(假设可以指定公共索引)。有什么帮助吗?如果您有两个形状相同的数据帧,那么:Python 熊猫从另一个数据帧填充数据帧中缺少的值,python,pandas,Python,Pandas,我找不到pandas函数(我以前见过)来用另一个数据帧中的值替换数据帧中的NaN(假设可以指定公共索引)。有什么帮助吗?如果您有两个形状相同的数据帧,那么: df[df.isnull()] = d2 我会成功的 只有df.isnull()计算结果为True(以绿色突出显示)的位置才有资格分配 实际上,数据帧的大小/形状并不总是相同的,转换方法(尤其是.shift())非常有用 输入的数据总是脏的、不完整的或不一致的。当然是标准杆。处理这些情况有相当广泛的方法。正如我刚刚了解到的,有一种方法可
df[df.isnull()] = d2
我会成功的
只有df.isnull()
计算结果为True
(以绿色突出显示)的位置才有资格分配
实际上,数据帧的大小/形状并不总是相同的,转换方法(尤其是.shift()
)非常有用
输入的数据总是脏的、不完整的或不一致的。当然是标准杆。处理这些情况有相当广泛的方法。正如我刚刚了解到的,有一种方法可以做到这一点,它的附加属性是,如果更新的数据帧
d2
大于原始的df
,则还会添加额外的行和列
df = df.combine_first(d2)
准确地回答了这个问题
但是,有时您希望用数据帧B中的值填充/替换/覆盖数据帧A的一些非缺失(非NaN)值。这个问题将我带到了本页,解决方案是
当条件
为真时,将使用A的值,否则将使用B的值
例如,您可以使用mask
解决OP的原始问题,这样当A中的元素为非NaN时,可以使用它,否则可以使用B中相应的元素
但是使用你可以用B中的值替换不符合任意标准(小于零?大于100?)的A的值。因此mask
更灵活,对这个问题来说是多余的,但我认为它值得一提(我需要它来解决我的问题)
还需要注意的是,B可以是numpy数组,而不是数据帧。要求B是数据帧,但只要求B是NDFrame且其维度与a的维度匹配。这应该简单到
df.fillna(d2)
这方面的专用方法是: 引自文件: 使用其他数据帧中的非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
注意,intersect
aaa,A
和eee,B
上更新的NaN
值听起来像是要合并。请展示一些示例场景。找到了!我想先使用combine_fillna
有一个value
参数,可用于通过公共索引映射缺少的值,但这要求参数类型为Series
或dict
,而不是DataFrame
。注意,您可能需要执行以下操作:df[df.isnull()]=d2.valuesBeautiful,simple,优雅!2021年最干净的解决方案应该是公认的答案。请注意,两个数据帧中的列名必须相同。
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