回答你的问题:是的。看看使用value
fillna 的参数。连同to_dict()
其他数据帧上的方法。
但要真正解决您的问题,请查看update()
DataFrame 的方法。假设您的两个数据框的索引相似,我认为这正是您想要的。
In [36]: df = pd.DataFrame({'A': [0, np.nan, 2, 3, np.nan, 5], 'B': [1, 0, 1, np.nan, np.nan, 1]})
In [37]: df
Out[37]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [38]: df2 = pd.DataFrame({'A': [0, np.nan, 2, 3, 4, 5], 'B': [1, 0, 1, 1, 0, 0]})
In [40]: df2
Out[40]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 0
In [52]: df.update(df2, overwrite=False)
In [53]: df
Out[53]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 1
请注意,所有的NaN
s indf
都被替换了,除了(1, A)
因为那NaN
也在df2
. 还有一些值在和(5, B)
之间有所不同。通过使用它可以保持价值。df
df2
overwrite=False
df
编辑:根据评论,您似乎正在寻找列名在两个 DataFrame 上不匹配的解决方案(如果您发布示例数据会很有帮助)。让我们尝试一下,将 A 列替换为 C,将 B 列替换为 D。
In [33]: df = pd.DataFrame({'A': [0, np.nan, 2, 3, np.nan, 5], 'B': [1, 0, 1, np.nan, np.nan, 1]})
In [34]: df2 = pd.DataFrame({'C': [0, np.nan, 2, 3, 4, 5], 'D': [1, 0, 1, 1, 0, 0]})
In [35]: df
Out[35]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [36]: df2
Out[36]:
C D
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 0
In [37]: d = {'A': df2.C, 'B': df2.D} # pass this values in fillna
In [38]: df
Out[38]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [40]: df.fillna(value=d)
Out[40]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 1
我认为如果你花时间学习熊猫,你会遇到更少的挫败感。这是一个巨大的图书馆,所以需要时间。