首页 > 解决方案 > 使用来自另一个数据帧的值迭代和替换 NaN 值

问题描述

阅读类似的帖子,但似乎没有找到正确的解决方案 - 我正在尝试用新数据框中的正确值替换数据框中的 NaN 值。当我尝试迭代数据框时,我遇到了一些错误。

masterdataframe

    |Date      | Key | Column1 | Column2 | Column3
 0  |2020-12-22| A   | 123     | 345     | 678
 1  |2020-12-22| B   | 123     | 345     | 678
 2  |2020-12-23| C   | NaN     | NaN     | NaN
 3  |2020-12-24| A   | NaN     | NaN     | NaN
 4  |2020-12-25| B   | NaN     | NaN     | NaN

包含我需要的数据的数据框如下所示:

df1
    |Date      | Key | Column1 | Column2 | Column3
 0  |2020-12-23| C   | 123     | 345     | 678

我将如何迭代 masterdataframe 以用 df1 中的数据替换正确的行?目前我正在做以下事情:

 for ind, row in masterdataframe.loc[3:].iterrows():
      masterdataframe[column1][row] = df1.iat[0,2]
      masterdataframe[column2][row] = df1.iat[0,3]
      masterdataframe[column3][row] = df1.iat[0,4]

但是我收到以下错误:“ValueError: cannot index with vector contains NA / NaN values”

对我来说,确保将 df1 中的值插入到 masterdataframe 的正确行中的最佳解决方案是什么?

我的理想输出如下:

masterdataframe

    |Date      | Key | Column1 | Column2 | Column3
 0  |2020-12-22| A   | 123     | 345     | 678
 1  |2020-12-22| B   | 123     | 345     | 678
 2  |2020-12-23| C   | 123     | 345     | 678
 3  |2020-12-24| A   | NaN     | NaN     | NaN
 4  |2020-12-25| B   | NaN     | NaN     | NaN

感谢帮助,谢谢

标签: pythonpandasdataframe

解决方案


您可以使用.updatedf1 中的值更新 masterdataframe 中的所有值。为此,您需要为两个数据框中的 Key 列设置索引。

masterdataframe = masterdataframe.set_index('Key')
df1= df1.set_index('Key')
masterdataframe.update(df1)

这将使用来自 df1 的所有列的值更新 masterdataframe 中的值,其中主数据帧中的键 = df1 中的键并且列名相同。

根据之后要执行的操作,您可能需要重置索引:

masterdataframe = masterdataframe.reset_index()

推荐阅读