2017-02-15 133 views
2

我想在我的数据框(标题)的某个列中找到部分字符串匹配。理想情况下,如果部分字符串匹配为true,我希望大熊猫创建一个真正的错误列,如果字符串匹配为false,则为false。我想为你创建一个if/else语句来创建一个def函数,因为我的数据集非常大。部分匹配If语句熊猫

如果'标题'栏中有'dog'这个单词,那么在我的新栏'Match'中输入一个true。

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

而不是'狗'你可以使用分隔符像'狗|猫' – 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

为一个案例独立'包含'做'df.title.str.contains('狗',案件=假)' – bunji

+0

@bunji国旗的作品也是我相信。 (请参阅我编辑的答案) – miradulo

+0

对我来说很不错:) – bunji