Elimine los extremos de las entradas de cadena en la columna Pandas DataFrame

Tengo una base de datos de pandas con una columna y una lista de archivos

import pandas as pd df = pd.read_csv('fname.csv') df.head() filename ABC fn1.txt 2 4 5 fn2.txt 1 2 1 fn3.txt .... .... 

Me gustaría eliminar la extensión de archivo .txt de cada entrada en el filename de filename . ¿Cómo logro esto?

Lo intenté:

 df['filename'] = df['filename'].map(lambda x: str(x)[:-4]) 

pero cuando miro las entradas de la columna después con df.head() , nada ha cambiado.

¿Cómo se hace esto?

Creo que puedes usar str.replace con regex .txt$' ( $ – coincide con el final de la cadena ):

 import pandas as pd df = pd.DataFrame({'A': {0: 2, 1: 1}, 'C': {0: 5, 1: 1}, 'B': {0: 4, 1: 2}, 'filename': {0: "txt.txt", 1: "x.txt"}}, columns=['filename','A','B', 'C']) print df filename ABC 0 txt.txt 2 4 5 1 x.txt 1 2 1 df['filename'] = df['filename'].str.replace(r'.txt$', '') print df filename ABC 0 txt 2 4 5 1 x 1 2 1 df['filename'] = df['filename'].map(lambda x: str(x)[:-4]) print df filename ABC 0 txt 2 4 5 1 x 1 2 1 df['filename'] = df['filename'].str[:-4] print df filename ABC 0 txt 2 4 5 1 x 1 2 1 

EDITAR:

rstrip puede eliminar más caracteres, si el final de las cadenas contiene algunos caracteres de cadena a rayas (en este caso, t , x ):

Ejemplo:

 print df filename ABC 0 txt.txt 2 4 5 1 x.txt 1 2 1 df['filename'] = df['filename'].str.rstrip('.txt') print df filename ABC 0 2 4 5 1 1 2 1 

Puedes usar str.rstrip para eliminar los finales:

 df['filename'] = df['filename'].str.rstrip('.txt') 

Deberia trabajar

Usted puede querer

df['filename'] = df.apply(lambda x: x['filename'][:-4], axis = 1)

usar lista de comprensión

 df['filename'] = [x[:-4] for x in df['filename']]