让我们说我有以下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
另一个数据框,甚至是一个系列,都缺少col2
和col3
的值。如何用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
答案 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