Создайте новый столбец, возвращающий true/false, если имена в двух столбцах совпадают с использованием регулярного выражения

У меня есть фрейм данных, в котором я пытаюсь сопоставить строковые значения столбцов двух столбцов, чтобы создать новый столбец, который возвращает 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
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
372
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать 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

Я получаю эту ошибку AttributeError: («Можно использовать только аксессор .str со строковыми значениями, которые используют np.object_ dtype в пандах», «произошло в номере индекса») извините, я должен был упомянуть, что есть другие столбцы, которые имеют числовые значения

TH14 09.04.2019 06:45

@TH14 Измените первую строку на: u = df[['Name A', 'Name B']].apply(lambda x: x.str.replace(r'[^\w]', '').str.lower()) и она должна работать

cs95 09.04.2019 06:50

Можно использовать 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 09.04.2019 07:16

@ TH14 вы просто сначала нарезаете столбцы, чтобы применить замену в интересующем фрейме данных ... например, df[cols].replace(...) где cols=['Name A', 'Name B'], например.

rafaelc 10.04.2019 01:14

Другие вопросы по теме