如何在保留现有值的情况下填充数据框中的数据

时间:2017-04-06 08:34:13

标签: python pandas dataframe

我有脚本将文件(df4)中的值填入现有数据框(df3)。但是dataframe df3已经包含已填充值的列,并且使用以下脚本将这些现有值设置为“NaN”:

df5 = df4.pivot_table(index='source', columns='plasmidgene', values='identity').reindex(index=df3.index, columns=df3.columns)

如何避免覆盖现有值?感谢

例如,我有df1

   a   b   c    d   e   f
1  1   30  Nan Nan Nan Nan
2  2   3   Nan Nan Nan Nan
3  16  1   Nan Nan Nan Nan

DF2

 1   1  d   80
 2   2  e   90
 3   3  c   60

我想创建这个

   a   b   c   d   e   f
1  1  30  Nan 80  Nan Nan
2  2   3  Nan Nan 90  Nan
3 16   1  60  Nan Nan Nan

1 个答案:

答案 0 :(得分:0)

我认为您可以使用combine_first

 df = df2.pivot_table(index='source', columns='plasmidgene', values='identity') \
        .reindex(index=df1.index, columns= df1.columns) \
        .combine_first(df1)

print (df)
      a     b     c     d     e   f
1   1.0  30.0   NaN  80.0   NaN NaN
2   2.0   3.0   NaN   NaN  90.0 NaN
3  16.0   1.0  60.0   NaN   NaN NaN

print (df.dtypes)
a    float64
b    float64
c    float64
d    float64
e    float64
f    float64
dtype: object

对于fillna,这是有问题的 - 不会将dtypes更改为float64,所以不要使用它 - 它看起来像bug:

df = df2.pivot_table(index='source', columns='plasmidgene', values='identity') \
        .reindex(index=df1.index, columns= df1.columns) \
        .fillna(df1)

print (df)
    a   b    c    d    e    f
1   1  30  NaN   80  NaN  NaN
2   2   3  NaN  NaN   90  NaN
3  16   1   60  NaN  NaN  NaN

print (df.dtypes)
a    object
b    object
c    object
d    object
e    object
f    object
dtype: object