2016-05-03 7 views
1

Ich versuche, eine Spalte in einem Datenrahmen durchlaufen, und erstellen Sie eine neue Spalte mit Teilstrings aus der Schleife Spalte, wenn es einen Wert in einem Wörterbuch enthält. Genauer gesagt, wenn die einzelne Zeile in der Adressspalte einen Zustand im Verzeichnis der Zustandsnamen und Abkürzungen enthält, fügen Sie die Zustandsabkürzung an eine Liste an, die zur neuen Spalte wird.Looping durch Datenframe zum Extrahieren von Teilstrings, die Wörterbuch passen

Der Code unten arbeitet für die vollständige Übereinstimmungen, aber scannt nicht die Zeilen für Teil:

import pandas as pd 

df = pd.DataFrame((['Austin, Texas', 
       'Texas', 
       'Seattle, Washington', 
       ',,, Texas', 
       'Olympia, WA']), columns = ['Place']) 

states = {'Texas': 'TX', 
     'Washington': 'WA'} 

place = df['Place'] 

results = [] 

for x in place: 
    if x in states: 
     results.append(x) 
    else: 
     results.append(None) 

df['State'] = results 
df 

Dank!

Antwort

0

Eine geschachtelte bedingte Liste Verständnis wird den Trick tun. Sie müssen die Kommas trennen und Streifen verwenden, um Leerraum zu entfernen.

Auch New York, New York (Stadt, Bundesland) könnte ein Problem verursachen, also habe ich die Ergebnisse in einer Liste gelassen.

df['results'] = [[state.strip() for state in cell.split(',') 
        if state.strip() in states] 
       for cell in df.Place] 

df['results2'] = df.results.apply(lambda s: s[-1] if s else '') 

>>> df 
       Place  results results2 
0  Austin, Texas  [Texas]  Texas 
1    Texas  [Texas]  Texas 
2 Seattle, Washington [Washington] Washington 
3   ,,, Texas  [Texas]  Texas 
4   Olympia, WA   []    
+0

Das macht den Trick, vielen Dank! – MuirSalt

+0

Ich habe vergessen zu fragen, wie würden Sie eine Nicht-Liste mit diesem zurückgeben? Ich glaube nicht, dass ich New York, New York in meinen Daten habe, also sollte es kein Problem für mich sein. – MuirSalt

+0

Sorry, ein Schädling zu sein, aber ich bekomme eine "Name" -Zelle "ist nicht definiert" Fehler? Eine schnelle Google-Suche schien nichts zu ziehen? – MuirSalt