python-3.x 用具有相同行数和不同列数的df2更新df1

prdp8dxp  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(79)

我有两个 Dataframe (df1,df2),并希望根据公共索引(col_index)用df2更新df1。我的目标是用df2的值(带有公共索引)更新np.nan的df1的值。

df1.shape >>> (3,83)
df2.shape >>> (3,21)

df1.set_index(col_index, inplace=True)
df2.set_index(col_index, inplace=True)

我尝试使用DataFrame.update()方法用df2更新df1

df1.update(df2,overwrite=False, errors='ignore')

根据documentation,如果来自df1的索引中至少有一个与df2匹配,则update方法应该起作用。然而,这并非个案。我得到了值错误。

File "c:/work/Projects/Project1/test.py", line 502, in merge_update_union_columns
    df1.update(df2,overwrite=False, errors='ignore')
  File "C:\work\Projects\Project1\venv38\lib\site-packages\pandas\core\frame.py", line 8130, in update
    self.loc[:, col] = expressions.where(mask, this, that)
  File "C:\work\Projects\Project1\venv38\lib\site-packages\pandas\core\computation\expressions.py", line 256, in where
    return _where(cond, a, b) if use_numexpr else _where_standard(cond, a, b)
  File "C:\work\Projects\Project1\venv38\lib\site-packages\pandas\core\computation\expressions.py", line 171, in _where_standard
    return np.where(cond, a, b)
  File "<__array_function__ internals>", line 200, in where
ValueError: operands could not be broadcast together with shapes (3,) (3,) (3,2)

你知道为什么update方法会这样吗?有没有其他方法可以用另一个来更新一个df。

juzqafwq

juzqafwq1#

通过在用df2更新df1之前将两个 Dataframe 的np.nan值替换为NAN来解决。

df1.replace(np.nan, 'NAN', inplace = True)
    df2.replace(np.nan, 'NAN', inplace = True)
    df1.update(df2,overwrite=True)
    df1.replace('NAN', np.nan, inplace = True)

相关问题