Python Pandas – вернуть значение по умолчанию, если совпадение не найдено

Я сравниваю 2 CSV-файла с pandas python, и все работает правильно. Это сопоставление в столбце employee_id и вывод результатов в файл csv

df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8") df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8") df3 = pd.merge(df1,df2, on='employee_id', how='right') df3.to_csv('output.csv', encoding='utf-8', index=False) 

Когда он не находит совпадение, он возвращает пустой результат, я бы хотел, чтобы вместо него возвращался not_found

Возможно ли это с Pandas или я должен выполнить некоторую обработку после этого?

Я думаю, вы можете использовать fillna если нет NaN в df1 :

 df1 = pd.DataFrame({'employee_id':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]}) print (df1) BC employee_id 0 4 7 1 1 5 8 2 2 6 9 3 df2 = pd.DataFrame({'employee_id':[1,4,6], 'D':[4,5,6], 'E':[7,8,9]}) print (df2) DE employee_id 0 4 7 1 1 5 8 4 2 6 9 6 df3 = pd.merge(df1,df2, on='employee_id', how='right') df3[df1.columns] = df3[df1.columns].fillna('not_found') print (df3) BC employee_id DE 0 4 7 1 4 7 1 not_found not_found 4 5 8 2 not_found not_found 6 6 9 

Но если NaN в df1 необходимо, создайте маску для определения отсутствующих значений из right соединения – с indicator=True параметра indicator=True в merge или с isin и минутой маски на ~ :

 df1 = pd.DataFrame({'employee_id':[1,2,3], 'B':[np.nan,5,6], 'C':[7,8,9]}) print (df1) BC employee_id 0 NaN 7 1 1 5.0 8 2 2 6.0 9 3 df3 = pd.merge(df1,df2, on='employee_id', how='right', indicator=True) mask = df3['_merge'] == 'right_only' df3.loc[mask, df1.columns.difference(['employee_id'])] = df3.loc[mask,df1.columns.difference(['employee_id'])].fillna('not_found') df3 = df3.drop('_merge', axis=1) print (df3) BC employee_id DE 0 NaN 7 1 4 7 1 not_found not_found 4 5 8 2 not_found not_found 6 6 9 

 df3 = pd.merge(df1,df2, on='employee_id', how='right') mask = ~df2['employee_id'].isin(df1['employee_id']) df3.loc[mask, df1.columns.difference(['employee_id'])] = \ df3.loc[mask,df1.columns.difference(['employee_id'])].fillna('not_found') print (df3) BC employee_id DE 0 NaN 7 1 4 7 1 not_found not_found 4 5 8 2 not_found not_found 6 6 9