我成功合并了两个数据帧,但我也希望看到那些合并失败的值。目的是验证合并后我拥有所有正确的值。是可以将它们转储到列表中还是更好地转移到另一个数据框?
在下面的代码示例中; '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')
答案 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']