2017-02-15 3 views
2

Ich versuche, eine Teilzeichenfolge in einer bestimmten Spalte meines Datenrahmens (Titel) zu finden. Im Idealfall möchte ich, dass Pandas eine wahre falsche Spalte erstellen, wenn die Teilzeichenfolge stimmt und false, wenn die Übereinstimmung der Zeichenfolge falsch ist. Ich möchte Ihnen eine Def-Funktion, um dies zu tun, um eine if/else-Anweisung zu erstellen, da mein Datensatz ziemlich groß ist.Partielle Übereinstimmung Wenn Anweisung Pandas

Wenn die Spalte 'Titel' das Wort 'Hund' enthält, dann trage in diese Zeile in meiner neuen Spalte 'Übereinstimmung' einen Wert ein.

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 

Antwort

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

@ John Galt Vielen Dank für Ihre schnelle und große Antworten. Was wäre, wenn ich mehrere Strings zuordnen möchte? Zum Beispiel wollte ich alle Titel finden, die das Wort Dogs sowie alle Kacheln mit Cats enthalten, sowie alle Titel mit Pigs drin. Kann ich das in einer Codezeile machen? – spacedinosaur10

+1

Anstelle von 'Hund' könnten Sie Trennzeichen wie 'Hund | Katze' – Zero

3

Gerade 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 

verwenden Verwendung Wenn Sie die Prüfung sein Groß- und Kleinschreibung wollen, können Sie eine re.IGNORECASE Flag verwenden.

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

Da dies mit re.search ist, können Sie für mehrere Strings mit einer regelmäßigen regex Weise überprüfen können, so etwas wie

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

für einen Fall unabhängig 'contains' verwenden' df.title.str.contains ('Hund', Fall = Falsch) ' – bunji

+0

@bunji Flag funktioniert auch ich glauben. (siehe meine bearbeitete Antwort) – miradulo

+0

sieht gut aus für mich :) – bunji

Verwandte Themen