У меня есть фрейм данных, в котором я пытаюсь сопоставить строковые значения столбцов двух столбцов, чтобы создать новый столбец, который возвращает true, если значения двух столбцов совпадают, или false, если они не совпадают. Хотите использовать совпадение и регулярное выражение, удалите все символы, отличные от буквенно-цифровых, и используйте строчные буквы для соответствия именам.
шаблон = перекомпилировать('[^a-zA-Z]')
Name A Name B
0 yGZ,) ygz.
1 (CGI) C.G.I
2 Exto exto.
3 Golden UTF
Я думал попробовать что-то вроде этого:
dataframe['Name A', 'Name B'].str.match(pattern, flags= re.IGNORECASE)
Name A Name B Result
0 yGZ,) ygz. True
1 (CGI) C.G.I True
2 Exto exto. True
3 Golden UTF False






Вы можете использовать str.replace для удаления знаков препинания (см. также другой мой пост, Быстрое удаление пунктуации с пандами), затем
u = df.apply(lambda x: x.str.replace(r'[^\w]', '').str.lower())
df['Result'] = u['Name A'] == u['Name B']
df
Name A Name B Result
0 yGZ,) ygz. True
1 (CGI) C.G.I True
2 Exto exto. True
3 Golden UTF False
@TH14 Измените первую строку на: u = df[['Name A', 'Name B']].apply(lambda x: x.str.replace(r'[^\w]', '').str.lower()) и она должна работать
Можно использовать pd.DataFrame.replace, чтобы почистить струны, а затем сравнить с помощью eq. Конечно, если вы хотите сохранить копию исходного df, просто назначьте возвращенный фрейм данных новой переменной ;}
df = df.replace("[^a-zA-Z0-9]", '', regex=True)
потом
df['Result'] = df['Name A'].str.lower().eq(df['Name B'].str.lower())
Выходы
Name A Name B Result
0 yGZ ygz True
1 CGI CGI True
2 Exto exto True
3 Golden UTF False
для иностранных символов очищенная версия столбца отображается как пустая, есть ли какое-либо решение для этого?
@ TH14 вы просто сначала нарезаете столбцы, чтобы применить замену в интересующем фрейме данных ... например, df[cols].replace(...) где cols=['Name A', 'Name B'], например.
Я получаю эту ошибку AttributeError: («Можно использовать только аксессор .str со строковыми значениями, которые используют np.object_ dtype в пандах», «произошло в номере индекса») извините, я должен был упомянуть, что есть другие столбцы, которые имеют числовые значения