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 или я должен выполнить некоторую обработку после этого?
- Решение для AssertionError: неверное определение dtype в get_concat_dtype при объединении операции в списке Dataframes
- Как очистить ввод CSV с помощью однопространственных строк?
- pandas.read_csv в среде Spark (IBM Bluemix)
- чтение csv-файла без
- Очистка запятых в цифрах с регулярными выражениями в Python
Я думаю, вы можете использовать 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
- BeautifulSoup найти без класса
- Использование selenium webdriver для ожидания атрибута элемента для изменения значения
- Что происходит с тренировками и прогнозами с помощью TensorFlow?
- Есть ли типичный читатель csv в python?
- Использование словарных клавиш в качестве координат при записи в csv
- Python Pandas объединяет столбцы метки времени и fillna в read_csv
- python сравнивает элементы считывателя dict из двух файлов csv
- Обработка текста в python csv
- Каков наиболее эффективный способ извлечения списка краев из огромного списка смежности?
- Бокс-участок в Пандах
- Чтение файла CSV в массив numpy, первая строка в виде строк, остальное как float