Поиск конкретных слов в столбце - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь использовать функцию findall, чтобы найти 4 конкретных слова в строке в столбце информационного кадра.

df = pd.DataFrame({'case':('Case1','Case2','Case3','Case4'),
                   'text':('good boy', 'bad girl', 'yoghurt', 'good girl yoghurt')})
    case    text
0   Case1   good boy
1   Case2   bad girl
2   Case3   yoghurt
3   Case4   good girl yoghurt

Допустим, я хочу найти 'good' и 'yoghurt', создаваясписок, в котором этот набор данных должен был бы дать мне: ['good', '', 'yoghurt', 'good, yoghurt'] - так, давая пустую строку или возвращая None, и давая мне оба слова, если они находятся в одной строке.Затем я могу создать из него новый столбец, поэтому важно, чтобы я получал все строки, даже если они пустые.

Большинство примеров findall включают символы регулярных выражений, и я пытаюсь заполнить их списком слов.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

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

s=df.text.str.get_dummies(sep=' ')[['good','yoghurt']]
s.eq(1).dot(s.columns+',').str[:-1]
Out[23]: 
0            good
1                
2         yoghurt
3    good,yoghurt
dtype: object
0 голосов
/ 26 ноября 2018

Вы можете использовать str.findall с оператором регулярных выражений | (что означает "или")

df['new_column'] = df.text.str.findall('good|yoghurt')
>>> df
    case               text       new_column
0  Case1           good boy           [good]
1  Case2           bad girl               []
2  Case3            yoghurt        [yoghurt]
3  Case4  good girl yoghurt  [good, yoghurt]

Если вы хотите, чтобы слова, объединенные запятой, находились в путиВаш вопрос предполагает, что вы можете применить ', '.join:

df['new_column'] = df.text.str.findall('(good|yoghurt)').apply(', '.join,1)
>>> df
    case               text     new_column
0  Case1           good boy           good
1  Case2           bad girl               
2  Case3            yoghurt        yoghurt
3  Case4  good girl yoghurt  good, yoghurt
...