检查一个Pandas Dataframe元素以更新另一个

时间:2017-06-01 15:14:40

标签: python pandas dataframe

我有两个具有相同列的数据帧。第二列是第一列的索引值的子集,但有些列的空字段和其他列的更新信息。

示例:

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的子集。

4 个答案:

答案 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。