我尝试更新 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/