Как я могу найти очень похожие, но НЕ равные строки в двух столбцах панд данных? - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь сравнить два столбца из двух разных dataframes, чтобы получить похожие значения. Значения являются строками, поэтому они не просто одинаковы, но очень похожи. Как я могу получить те же значения?

Используемые мной фреймы данных выглядят следующим образом:

Dataframe 1, column "Company", row = "Company_name"

Dataframe 2, column "Company", row = "Company_name_INC"

Что бы я хотел получить:

Dataframe 3, column "Company_source_1" row = "Company_name", column "Company_source_2", row = "Company_name_INC"

Мне нужно найти имена, которые почти совпадают, чтобы найти компании, которые появляются в обоих фреймах данных.

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать регулярные выражения:

Регулярные выражения (https://docs.python.org/3/howto/regex.html) могут использоваться для выполнения именно того, что вы просите. Например, если вы ищете компанию, связанную с 'Regex', например:

Regex
Regex_inc
NotRegex

Вы можете сделать следующее:

[Обратите внимание, что я преобразовал столбец DataFrame Name в серию и использую метод .str.contains(), который можно использовать для индексации соответствующих строк из вашего исходного кадра данных (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html)]

import pandas as pd

data = [['Regex', 'company_1'],
    ['Regex_inc', 'company_2'],
    ['NotRegex', 'company_3']]
df = pd.DataFrame(data).rename(columns={0:'Name', 1:'Company'})
df_sorted = df[pd.Series(df['Name']).str.contains(r'^Regex')]
print df
print df_sorted

Возвращает

        Name    Company
0      Regex  company_1
1  Regex_inc  company_2
2   NotRegex  company_3

для df и:

       Name    Company
0      Regex  company_1
1  Regex_inc  company_2

для df_sorted

Аргумент для метода pd.Series.str.contains() был '^Regex', в котором говорится, что для строки, возвращающей значение True, она должна начинаться с 'Regex'.

Я использовал эту таблицу регулярных выражений (https://www.rexegg.com/regex-quickstart.html) для специальных символов. Я не специалист по регулярным выражениям, но в Интернете можно найти множество материалов, в том числе ссылки, содержащиеся в этом ответе. Также здесь ( https://regex101.com/) - это тестер регулярных выражений, который можно использовать для проверки ваших шаблонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...