2016-11-03 4 views
2

Ich bin erfolgreich zwei Datenframes zusammenführen, aber ich möchte auch die Werte sehen, die die Zusammenführung fehlgeschlagen. Der Zweck ist zu überprüfen, dass ich alle richtigen Werte als Ergebnis der Zusammenführung habe. Ist es möglich, sie in eine Liste oder noch besser in einen anderen Datenrahmen zu schreiben?Ist es möglich, Werte aus einem Datenrahmen aufzulisten, der nicht zusammengeführt werden konnte?

Im folgenden Codebeispiel; 'company_f' schlägt die Zusammenführung fehl, das ist der Datensatz, den ich sehen muss.

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') 

Antwort

2

Numpy Lösung mit numpy.setxor1d:

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

Ich glaube, Sie indicator äußere Verknüpfung mit dem Parameter verwenden und filtern dann durch 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'] 
+0

Funktioniert wie ein Charme danke @jezrael – FunnyChef

Verwandte Themen