pd.merge处理空值

时间:2019-08-14 09:08:14

标签: python pandas merge null

我需要合并两个缺少很多值的df(np.nan,None和(null))。

t1= pd.DataFrame(np.array([[1,2,3],[4,5,99]]),columns=['a','b','c'])
t2= pd.DataFrame(np.array([[1,None,3,'hello'],[4,5,6,'moon']]),columns=['a','b','c','d'])
t = pd.merge(t1,t2,how='outer', on=["a","c"])

也就是说,数据帧是:

t1 =
    a   b   c
0   1   2   3
1   4   5   99

t2 =
    a   b   c   d
0   1   None 3  hello
1   4   5   6   moon

我需要一个结果df,以便每次观察都获得一行,而不会丢失任何数据。

相反,我得到了一个新行,将“ None”保留为值。

在上面的示例中,我想要

t= pd.DataFrame(np.array([[1,2,3,'hello'],[4,5,99,'moon'],[4,5,6,'moon']]),columns=['a','b','c','d'])

也就是说,我想要:

t =
    a   b   c   d
0   1   2   3   hello
1   4   5   99  moon
2   4   5   6   moon

1 个答案:

答案 0 :(得分:1)

对您来说这是一种特殊情况,但是您可以尝试:

t= pd.merge(t1, t2[['a', 'd']].dropna(), how='left', on='a').append(t2.dropna())

merge函数将t1用于您的左联接,append将追加t2的缺失行,从t2开始,您将仅将d列联接到其上,dropna()将下拉您的None行。