2015-10-29 18 views
5

Ich versuche, Code zu schreiben, der eine Zeichenfolge in einer Dataframe-Spalte an Komma (so dass es eine Liste wird) und eine bestimmte Zeichenfolge aus der Liste entfernt, wenn es vorhanden ist. Nach dem Entfernen der unerwünschten Zeichenfolge möchte ich die Listenelemente erneut an Komma anschließen. Meine Datenrahmen sieht wie folgt aus:Wie String-Wert aus der Spalte in Pandas Dataframe entfernen

df: 

    Column1 Column2 
0  a  a,b,c 
1  y  b,n,m 
2  d  n,n,m 
3  d  b,b,x 

Also im Grunde mein Ziel ist es, alle b Werte von column2 zu entfernen, so dass ich bekommen:

df:

Column1 Column2 
0  a  a,c 
1  y  n,m 
2  d  n,n,m 
3  d  x 

Der Code, den ich geschrieben habe, ist die folgende:

df=df['Column2'].apply(lambda x: x.split(',')) 

def exclude_b(df): 
    for index, liste in df['column2].iteritems(): 
     if 'b' in liste: 
      liste.remove('b') 
      return liste 
     else: 
      return liste 

Die erste Zeile teilt alle Werte in der Spalte in eine durch Komma getrennte Liste. Mit der Funktion habe ich nun versucht, alle Listen zu iterieren und das b zu entfernen, falls es vorhanden ist. Wenn es nicht vorhanden ist, gebe die Liste zurück, so wie sie ist. Wenn ich 'liste' am Ende drucke, gibt es nur die erste Zeile von Column2 zurück, aber nicht die anderen. Was mache ich falsch? Und würde es eine Möglichkeit geben, meine if-Bedingung in eine Lambda-Funktion umzusetzen?

+0

Wie wäre es mit einer Funktion der Anwendung, die Spalte2 ohne unerwünschte Zeichenfolge zurückgibt? –

Antwort

8

einfach können Sie die regex anwenden b,?, die einen Wert von b und , nach dem b gefunden bedeutet ersetzen, wenn

existiert
df['Column2'] = df.Column2.str.replace('b,?' , '') 

Out[238]: 
Column1 Column2 
0 a a,c 
1 y n,m 
2 d n,n,m 
3 d x 
+0

lächerlich einfach. Vielen Dank! –

+0

Wie könnte dies auf alle beliebigen Zeichenfolge oder Zeichen, die ich mich wundere, angewendet werden –

Verwandte Themen