我有两个具有相同列的数据帧。第二列是第一列的索引值的子集,但有些列的空字段和其他列的更新信息。
示例:
DFA:
Height Weight Age Street PhoneNumber
Pete 5.2 130 33 Pine 123-456-7890
Mary 5.0 110 34 Main 434-444-5555
Rob 6.0 230 44 Maple 999-444-2222
....
DFB:
Height Weight Age Street PhoneNumber
Pete Nan 125 Nan Arbor Nan
Rob Nan 235 45 Nan 776-333-3222
我想使用dfa
中的新信息更新dfb
中的字段。如果dfb
没有更新(字段为Nan),我希望将原始值保留在dfa
。
我能想到的唯一方法是按行和列迭代,找到dfb
中的元素,然后将dfa
中的相应地址设置为dfb
中的地址}。难看。
是否有更清洁(更pythonic)的方法呢?
提前致谢。
编辑:为了清晰起见,更改了dfb。这两个dfs没有相同的索引。 dfb是dfa的子集。
答案 0 :(得分:5)
你需要的是combine_first
确保那些“Nan”首先是np.nan:
dfb = dfb.replace('Nan',np.nan)
dfb.combine_first(dfa)
输出:
Height Weight Age Street PhoneNumber
Pete 5.2 125 33 Arbor 123-456-7890
Mary 5.0 110 34 Main 434-444-5555
Rob 6.0 235 45 Maple 776-333-3222
答案 1 :(得分:1)
如果dfb的索引与dfa相同,可能使用一些掩码,如
mask = dfb.notnull()
dfa[mask] = dfb[mask]
答案 2 :(得分:1)
您要找的是fillna()
,请看这里
link
在你的情况下只需要dfb.fillna(dfa)
工作
答案 3 :(得分:1)
您只想update原始数据框:
dfa.update(dfb)
>>> dfa
Height Weight Age Street PhoneNumber
Pete 5.2 125 33 Arbor 123-456-7890
Mary 5.0 110 34 Main 434-444-5555
Rob 6.0 235 45 Maple 776-333-3222
update
使用第二个dataFrame中的非NA值修改原始dataFrame。