python - 通过具有 NaN 值的数据帧更新数据帧

标签 python pandas dataframe updates

我尝试更新 DataFrame

df1 = pd.DataFrame(data = {'A' : [1,2,3,4], 'B' : [5,6,7,8]})

由另一个数据帧
df2 = pd.DataFrame(data = {'B' : [9, np.nan, 11, np.nan]}).

现在,我的目标是更新 df1来自 df2并使用覆盖所有值( NaN 值)
df1.update(df2)

与常见用法相比,获得 NaN 对我来说很重要。值最终在 df1 .
但据我所知,更新返回
>>> df1
      A   B
0     1   9
1     2   6
2     3   11
3     4   8

有没有办法得到
>>> df1
    A    B
0   1    9
1   2    NaN
2   3    11
3   4    NaN

无建筑df1手动?

最佳答案

我迟到了,但我最近遇到了同样的问题,即尝试更新数据帧而不忽略像 Pandas 内置的 NaN 值 update方法。
对于共享相同列名的两个数据框,一种解决方法是连接两个数据框,然后删除重复项,只保留最后一个条目:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(data = {'A' : [1,2,3,4], 'B' : [5,6,7,8]})
df2 = pd.DataFrame(data = {'A' : [1,2,3,4], 'B' : [9, np.nan, 11, np.nan]})

frames = [df1, df2]
df_concatenated = pd.concat(frames)
df1=df_concatenated.loc[~df_concatenated.index.duplicated(keep='last')]

根据索引,可能需要对输出数据帧的索引进行排序:
df1=df1.sort_index()

为您解决非常具体的例子,其中df2没有 A 列,您可以运行:
import pandas as pd
import numpy as np

df1 = pd.DataFrame(data = {'A' : [1,2,3,4], 'B' : [5,6,7,8]})
df2 = pd.DataFrame(data = {'B' : [9, np.nan, 11, np.nan]})

frames = [df1, df2]
df_concatenated = pd.concat(frames)

df1['B']=df_concatenated.loc[~df_concatenated.index.duplicated(keep='last')]['B']

关于python - 通过具有 NaN 值的数据帧更新数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52728506/

相关文章:

python - lxml iterparse 缺少子节点

python - 没有名为 bidi.algorithm 的模块

python - 从循环中的字符串列表创建新的列名称

python - Pandas - 有条件的 groupby

r - 根据 R 中的日期(年度)创建排名

Python:如何为字典分配一个长度不同的列表的值?

python - 以授权模式从 Python 连接 mongodb

python - 减去 Pandas Dataframe 中的条目并存储在新列中

r - 计算 R 中的滚动差异

python - 使用 Excel 工作表中的数据替换数据框中的值