Eliminar caracteres de una cadena en pandas

Tengo una pregunta similar a esta: Pandas DataFrame: elimina las partes no deseadas de las cadenas en una columna .

Así que utilicé:

temp_dataframe['PPI'] = temp_dataframe['PPI'].map(lambda x: x.lstrip('PPI/')) 

La mayoría de los artículos comienzan con un ‘PPI /’ pero no todos. Parece que cuando un elemento sin el sufijo ‘PPI /’ encontró este error:

AttributeError: el objeto ‘float’ no tiene atributo ‘lstrip’

¿Me estoy perdiendo de algo?

usar reemplazar

 temp_dataframe['PPI'].replace('PPI/','',regex=True,inplace=True) 

o string.replace :

 temp_dataframe['PPI'].str.replace('PPI/','') 

utilizar str.lstrip str.lstrip :

 temp_dataframe['PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/') 

Parece que es posible que falten valores, por lo que debería enmascararlos o reemplazarlos:

 temp_dataframe['PPI'].fillna('', inplace=True) 

o

 temp_dataframe.loc[temp_dataframe['PPI'].notnull(), 'PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/') 

quizás un método mejor es filtrar usando str.startswith y usar split y acceder a la cadena después del prefijo que desea eliminar:

 temp_dataframe.loc[temp_dataframe['PPI'].str.startswith('PPI/'), 'PPI'] = temp_dataframe['PPI'].str.split('PPI/').str[1] 

Como @JonClements señaló que lstrip está eliminando espacios en blanco en lugar de eliminar el prefijo que es lo que está buscando.

actualizar

Otro método es pasar un patrón de expresiones regulares que busque el prefijo opcional y extraer todos los caracteres después del prefijo:

 temp_dataframe['PPI'].str.extract('(?:PPI/)?(.*)', expand=False)