2017-02-15 150 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