熊猫合并功能似乎有一个怪癖。它认为NaN值相等,并将NaNs与其他NaNs合并:
>&燃气轮机&燃气轮机;foo=数据帧([
[a',1,2],
[b',4,5],
[c',7,8],
[np.NaN,10,11]
],列=['id','x','y'])
&燃气轮机&燃气轮机&燃气轮机;bar=数据帧([
[a',3],
[c',9],
[np.NaN,12]
],列=['id','z'])
&燃气轮机&燃气轮机&燃气轮机;pd.merge(foo,bar,how='left',on='id')
输Output[428]:
id x y z
0 a 12 3
1 b 4 5南
2 c 7 8 9
3南10 11 12
[4行x 4列]
这与我见过的任何RDB都不一样,通常缺失的值都以不可知论的方式处理,不会像它们相等一样合并在一起。对于具有稀疏数据的数据集来说,这尤其有问题(每个NaN都将合并到其他NaN中,从而产生一个巨大的数据帧!)
有没有一种方法可以在合并过程中忽略缺少的值,而不首先将它们切掉
在合并过程中,id为空时,可以从bar(如果需要,也可以从foo中排除值)。但我不确定你要的是什么,因为它们被切掉了
(我假设从您的左连接开始,您有兴趣保留所有foo,但只希望合并匹配且不为空的bar部分。)
foo.merge(bar[pd.notnull(bar.id)],how='left',on='id')
Output[11]:
id x y z
0 a 12 3
1 b 4 5南
2 c 7 8 9
3南10 11南