Нахождение ключевого слова +1 и создание нового столбца - PullRequest
1 голос
/ 27 мая 2019

Цели:

1) найти слово рядом с ключевым словом (например, brca)

2) создать новый столбец с этим словом

Справочная информация:

1) У меня есть список l, в котором я преобразую в фрейм данных df и извлекаю из него слово brca, используя следующий код:

l = ['carcinoma brca positive completion mastectomy',
     'clinical brca gene mutation',
     'carcinoma brca positive chemotherapy']
df = pd.DataFrame(l, columns=['Text'])
df['Gene'] = df['Text'].str.extract(r"(brca)")

Вывод:

                                                Text    Gene
0   breast invasive lobular carcinoma brca positiv...   brca
1   clinical history brca gene mutation . gross de...   brca
2   left breast invasive ductal carcinoma brca pos...   brca

Проблема:

Однако я сейчас пытаюсь найти слово рядом сслово brca для каждой строки и создайте новый столбец.

Желаемый результат:

                                                Text    Gene  NextWord
0   breast invasive lobular carcinoma brca positiv...   brca  positive
1   clinical history brca gene mutation . gross de...   brca  gene
2   left breast invasive ductal carcinoma brca pos...   brca  positive

Я посмотрел Python Pandas DataFrame слова в контексте: получить 3 слова до и после и PANDAS Поиск точного слова и слова перед словом в столбце строки и добавить этот новый столбец в столбце python (pandas) , но они не совсем подходят для меня.

Вопрос:

Как мне достичь своих целей?

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Мы можем использовать встроенный метод python, называемый partition

df['NextWord'] = df['Text'].apply(lambda x: x.partition('brca')[2]).str.split().str[0]

выход

                                            Text  Gene  NextWord
0  carcinoma brca positive completion mastectomy  brca  positive
1                    clinical brca gene mutation  brca      gene
2           carcinoma brca positive chemotherapy  brca  positive

Объяснение

.partition возвращает три значения:

  • Строка перед ключевым словом
  • Само ключевое слово
  • Строка после ключевого слова
string = 'carcinoma brca positive completion mastectomy'

before, keyword, after = string.partition('brca')

print(before)
print(keyword)
print(after)

выход

carcinoma 
brca
 positive completion mastectomy

Скорость

Мне было любопытно сравнить скорость ответов между ответами, поскольку я использовал .apply, но это встроенный метод. Неожиданно мой ответ оказался самым быстрым:

dfbig = pd.concat([df]*10000, ignore_index=True)
dfbig.shape

(30000, 2)
%%timeit
dfbig['Text'].apply(lambda x: x.partition('brca')[2]).str.split().str[0]
31.5 ms ± 1.36 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
dfbig['NextWord'] = dfbig['Text'].str.split('brca').str[1].str.split('\s').str[1]
74.5 ms ± 2.56 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
dfbig['NextWord'] = dfbig['Text'].str.extract(r"(?<=brca)(.+?) ")
40.7 ms ± 2.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
0 голосов
/ 27 мая 2019

Использование:

import pandas as pd

l = ['carcinoma brca positive completion mastectomy',
     'clinical brca gene mutation',
     'carcinoma brca positive chemotherapy']
df = pd.DataFrame(l, columns=['Text'])

df['NextWord'] = df['Text'].str.extract(r"(?<=brca)(.+?) ")
print(df)

Выход:

                                            Text   NextWord
0  carcinoma brca positive completion mastectomy   positive
1                    clinical brca gene mutation       gene
2           carcinoma brca positive chemotherapy   positive
0 голосов
/ 27 мая 2019

При интенсивном использовании панд Series.str аксессуар:

df['NextWord'] = df['Text'].str.split('brca').str[1].str.split('\s').str[1]
df

                                            Text  Gene  NextWord
0  carcinoma brca positive completion mastectomy  brca  positive
1                    clinical brca gene mutation  brca      gene
2           carcinoma brca positive chemotherapy  brca  positive
...