是否可以列出无法合并的数据框中的值?

时间:2016-11-03 15:45:20

标签: python pandas merge

我成功合并了两个数据帧,但我也希望看到那些合并失败的值。目的是验证合并后我拥有所有正确的值。是可以将它们转储到列表中还是更好地转移到另一个数据框?

在下面的代码示例中; 'company_f'合并失败,这就是我需要看的记录。

import pandas as pd

data1 = pd.DataFrame({'id': ['a12bcde0','b20bcde9'], 'title': ['company_a','company_b']})

data2 = pd.DataFrame({'serial_number': ['01a2b345','10ab2030','40ab4060'],'title':['company_a','company_b (123)','company_f']}) 

data2['title'].replace(regex=True,inplace=True,to_replace=r"\s\(.*\)",value=r'')

pd.merge(data1, data2, on='title')

1 个答案:

答案 0 :(得分:2)

使用numpy.setxor1d的Numpy解决方案:

print (np.setxor1d(data1.title,data2.title))
['company_f']

我认为您可以使用带参数indicator的外部联接,然后按boolean indexing进行过滤:

df = pd.merge(data1, data2, on='title', how='outer', indicator=True)

df1 = df[df._merge == 'both']
print (df1)
         id      title serial_number _merge
0  a12bcde0  company_a      01a2b345   both
1  b20bcde9  company_b      10ab2030   both

print (df1.drop('_merge', axis=1))
         id      title serial_number
0  a12bcde0  company_a      01a2b345
1  b20bcde9  company_b      10ab2030
print (df[df._merge != 'both'])
    id      title serial_number      _merge
2  NaN  company_f      40ab4060  right_only

L = df.ix[df._merge != 'both', 'title'].tolist()
print (L)
['company_f']