看起来pandas合并函数存在一个小问题。它认为NaN
值是相等的,并且会将NaN
与其他NaN
合并:
>>> foo = DataFrame([
['a',1,2],
['b',4,5],
['c',7,8],
[np.NaN,10,11]
], columns=['id','x','y'])
>>> bar = DataFrame([
['a',3],
['c',9],
[np.NaN,12]
], columns=['id','z'])
>>> pd.merge(foo, bar, how='left', on='id')
Out[428]:
id x y z
0 a 1 2 3
1 b 4 5 NaN
2 c 7 8 9
3 NaN 10 11 12
[4 rows x 4 columns]
这与我见过的任何关系型数据库不同,通常缺失值会被视为不确定性并且不会被合并在一起,就像它们是相等的一样。这对于稀疏数据集尤其有问题(每个NaN将与其他每个NaN合并,导致一个巨大的DataFrame!)
有没有一种方法可以在合并时忽略缺失值而不必先将它们切片出来?