2013-01-15 26 views
22

Ho un problema simile a quello postato qui:Sostituzione parte della stringa nella panda pitone dataframe

Pandas DataFrame: remove unwanted parts from strings in a column

ho bisogno di rimuovere i caratteri di nuova riga all'interno di una stringa in un dataframe. Fondamentalmente, ho accesso a una API usando il modulo json di python e tutto ok. Anche la creazione di DataFrame funziona in modo sorprendente. Tuttavia, quando voglio produrre il risultato finale in un csv, mi blocco un po ', perché ci sono delle nuove righe che creano false "nuove righe" nel file csv.

Quindi, fondamentalmente sto cercando di trasformare questo:

' ... Questo è un paragrafo.

E questo è un altro punto ... '

in questo:

' ... Questo è un paragrafo. E questo è un altro paragrafo ... '

Non mi interessa conservare qualsiasi tipo di \ n' o simboli speciali per l'interruzione di paragrafo. Quindi può essere spogliato.

Ho provato un paio di varianti:

misc['product_desc'] = misc['product_desc'].strip('\n') 

AttributeError: 'Series' object has no attribute 'strip' 

ecco un altro

misc['product_desc'] = misc['product_desc'].str.strip('\n') 

TypeError: wrapper() takes exactly 1 argument (2 given) 

misc['product_desc'] = misc['product_desc'].map(lambda x: x.strip('\n')) 
misc['product_desc'] = misc['product_desc'].map(lambda x: x.strip('\n\t')) 

Non v'è alcun messaggio di errore, ma i caratteri di fine riga non andare via, neanche. Stessa cosa con questo:

misc = misc.replace('\n', '') 

La scrittura alla linea csv è questa:

misc_id.to_csv('C:\Users\jlalonde\Desktop\misc_w_id.csv', sep=' ', na_rep='', index=False, encoding='utf-8') 

versione della Panda è 0.9.1

Grazie! :)

risposta

46

strip rimuove solo i caratteri specificati all'inizio e alla fine della stringa. Se si desidera rimuovere tutti\n, è necessario utilizzare replace.

misc['product_desc'] = misc['product_desc'].str.replace('\n', '') 
+0

è questo 'inplace'? – user1767754

+0

@ user1767754: modifica il DataFrame originale, se questo è ciò che intendi. Non è però rigorosamente "sul posto"; crea una nuova colonna con i valori modificati e poi la riassegna, sovrascrivendo la colonna originale. – BrenBarn

6

Si potrebbe utilizzare regex parametro del replace metodo per raggiungere questo:

misc['product_desc'] = misc['product_desc'].replace(to_replace='\n', value='', regex=True) 
+2

Se 'product_desc' può contenere valori misti (es. Float, str ...) quindi convertirlo in' np.str' per funzionare correttamente: 'misc ['product_desc'] = misc ['product_desc']. Astype (np. str) .replace (to_replace = '\ n', value = '', regex = True) '. Altrimenti solo i valori 'str' saranno sostituiti ... – ragesz

+2

to_replace può usare anche una lista:' .replace (to_replace = ['\ n', '\ t'], value = '', regex = True) ' –