我有两个 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。
1条答案
按热度按时间juzqafwq1#
通过在用df2更新df1之前将两个 Dataframe 的np.nan值替换为NAN来解决。