如何替换DataFrame中丢失的数据

时间:2019-11-09 14:20:42

标签: python pandas dataframe

让我们说我有以下DataFrame:

df = pd.DataFrame({'col1': [241, 123, 423], 'col2':[977, 78, np.NaN], 'col3':[76, 432, np.NaN], 'col4':[234, 321, 987]}, index=pd.date_range('2019-1-1', periods=3, freq="D")).rename_axis('Date')

输出:

            col1   col2   col3  col4
Date                                
2019-01-01   241  977.0   76.0   234
2019-01-02   123   78.0  432.0   321
2019-01-03   423    NaN    NaN   987

另一个数据框,甚至是一个系列,都缺少col2col3的值。如何用NaN中的值替换df2中的值?

df2 = pd.DataFrame({'col2': 111, 'col3': 222}, index=[pd.to_datetime('2019-1-3')]).rename_axis('Date')

如下所示:

            col2  col3
Date                  
2019-01-03   111   222

我想要的最终DataFrame应该如下所示:

            col1   col2   col3  col4
Date                                
2019-01-01   241  977.0   76.0   234
2019-01-02   123   78.0  432.0   321
2019-01-03   423    111    222   987

2 个答案:

答案 0 :(得分:3)

我们可以使用DataFrame.fillna

df=df.fillna(df2)
print(df)

            col1   col2   col3  col4
Date                                
2019-01-01   241  977.0   76.0   234
2019-01-02   123   78.0  432.0   321
2019-01-03   423  111.0  222.0   987

如果您有一系列的列,例如使用df2.iloc[0]获得的列,我们也可以这样做:

my_serie=df2.iloc[0]
print(my_serie)
col2    111
col3    222
Name: 2019-01-03 00:00:00, dtype: int64

print(df.fillna(my_serie))
            col1   col2   col3  col4
Date                                
2019-01-01   241  977.0   76.0   234
2019-01-02   123   78.0  432.0   321
2019-01-03   423  111.0  222.0   987

答案 1 :(得分:3)

备用combine_first

df2.combine_first(df)
Out[8]: 
             col1   col2   col3   col4
Date                                  
2019-01-01  241.0  977.0   76.0  234.0
2019-01-02  123.0   78.0  432.0  321.0
2019-01-03  423.0  111.0  222.0  987.0

update

df.update(df2)
df
Out[10]: 
            col1   col2   col3  col4
Date                                
2019-01-01   241  977.0   76.0   234
2019-01-02   123   78.0  432.0   321
2019-01-03   423  111.0  222.0   987