2017-02-15 6 views
2

Я пытаюсь найти частичное совпадение строк в определенном столбце моей dataframe (Title). В идеале я хотел бы, чтобы pandas создавали истинный ложный столбец, если совпадение с частичной строкой - true и false, если совпадение строки является ложным. Я хотел бы вам def def, чтобы сделать это, чтобы создать оператор if/else, поскольку мой набор данных довольно велик.Частичное совпадение Если заявление Pandas

Если в столбце «Заголовок» есть слово «собака», вставьте его в эту строку в новом столбце «Матч».

Old Dataframe example: 

Title   Author Name 
Dogs R Us  John Smith 
Pigs can Fly Henry White 
Dog Games  Adam James   


New Dataframe example: 
Title   Author Name  Match 
Dogs R Us  John Smith  True 
Pigs can Fly Henry White  False 
Dog Games  Adam James  True 

ответ

2

str.contains Использование

In [832]: df.Title.str.contains('Dog') 
Out[832]: 
0  True 
1 False 
2  True 
Name: Title, dtype: bool 

In [833]: df['Match'] = df.Title.str.contains('Dog') 

In [834]: df 
Out[834]: 
      Title Author Name Match 
0  Dogs R Us John Smith True 
1 Pigs can Fly Henry White False 
2  Dog Games Adam James True 
+0

@ Джон Галт Большого спасибо за быстрые и большие ответы. Что делать, если я хотел бы сопоставить несколько строк. Например, я хотел найти все названия, в которых есть слово «Собаки», а также все плитки с кошками в нем, а также все титулы с участием Свиней. Могу ли я сделать это в одной строке кода? – spacedinosaur10

+1

Вместо «Dog» вы можете использовать разделитель как «Dog | Cat» – Zero

3

Просто используйте pandas.Series.str.contains.

>>> df 
      title 
0  dogs r us 
1 pigs can fly 
2  dog games 

>>> df['Match'] = df.title.str.contains('dog') 

>>> df 
      title Match 
0  dogs r us True 
1 pigs can fly False 
2  dog games True 

Если вы хотите, чтобы проверить, чтобы быть чувствительны к регистру, вы можете использовать re.IGNORECASE флаг.

>>> df['Match'] = df.title.str.contains('dog', flags=re.IGNORECASE) 

Поскольку это с помощью re.search, вы можете проверить наличие нескольких строк с регулярными регулярными выражениями образом, что-то вроде

>>> df['Match'] = df.title.str.contains('dog|cats', flags=re.IGNORECASE) 
+0

для независимого случая 'contains' do' df.title.str.contains ('dog', case = False) ' – bunji

+0

@bunji Флаг тоже работает верить. (см. мой отредактированный ответ) – miradulo

+0

выглядит хорошо для меня :) – bunji

Смежные вопросы