2015-10-29 15 views
5

Sto provando a scrivere del codice che divide una stringa in una colonna dataframe con una virgola (quindi diventa una lista) e rimuove una determinata stringa dall'elenco se presente. dopo aver rimosso la stringa indesiderata voglio unirmi nuovamente agli elementi della lista alla virgola. Il mio dataframe assomiglia a questo:Come rimuovere il valore di stringa dalla colonna in pda dataframe

df: 

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

Quindi, in pratica il mio obiettivo è quello di rimuovere tutti i valori di b da column2 in modo che ottengo:

df:

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

Il codice che ho scritto è la seguente:

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 

La prima riga divide tutti i valori nella colonna in un elenco separato da virgole. con la funzione ora ho provato a scorrere tutte le liste e rimuovere la b se presente, se non è presente restituire la lista così com'è. Se stampo 'liste' alla fine restituisce solo la prima riga di Column2, ma non gli altri. Che cosa sto facendo di sbagliato? E ci sarebbe un modo per implementare la mia condizione if in una funzione lambda?

+0

ne dite di applicare una funzione che restituisce Column2 senza la stringa indesiderato? –

risposta

8

semplicemente è possibile applicare l'espressione regolare b,?, il che significa sostituire qualsiasi valore b e , trovato dopo il b se esiste

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

incredibilmente facile. Grazie! –

+0

come potrebbe essere applicato a qualsiasi rimuovere qualsiasi stringa o carattere arbitrario mi chiedo –

Problemi correlati