Manipulación de cadenas de datos

Tengo un dataframe que tiene una columna con datos que se parecen a esto:

AAH. AAH. AAR.UN AAR.UN AAR.UN AAR.UN AAV. AAV. AAV. 

Creo que necesito usar el método de aplicación para recortar los datos de la columna. Entonces, si hay algo después del período, mantenga los datos sin cambios, pero si no hay nada después del período, devuelva solo las letras sin el punto al final. Sé que probablemente pueda usar una función lambda y tal vez una división de cadenas o algo para hacer esto, pero no tengo mucha idea para hacer que suceda.

Esto es algo de lo que tengo hasta ahora:

 df.apply(lambda x: string.split('.')) 

¿No estoy seguro si puedo usar una sentencia if o algo con la función lambda de esta manera?

Cualquier orientación apreciada.

Related of "Manipulación de cadenas de datos"

Como solo hay una columna, puede aprovechar las operaciones de cadenas vectorizadas a través de .str ( docs ):

 >>> df 0 0 AAH. 1 AAH. 2 AAR.UN 3 AAR.UN 4 AAR.UN 5 AAR.UN 6 AAV. 7 AAV. 8 AAV. >>> df[0] = df[0].str.rstrip('.') >>> df 0 0 AAH 1 AAH 2 AAR.UN 3 AAR.UN 4 AAR.UN 5 AAR.UN 6 AAV 7 AAV 8 AAV 

De lo contrario, tendría que hacer algo como df.applymap(lambda x: x.rstrip(".")) , O desplácese hacia abajo a métodos de caracteres numpy.

También puedes usar la función lambda para hacer esto:

 >>> L = [['AAH.'], ['AAR.UN'], ['AAR.UN'], ['AAV.'], ['AAV.']] >>> df = pd.DataFrame(L) >>> M = lambda x: x[0][:-1] if x[0][-1]=='.' else x[0][:] >>> df = df.apply(M, axis=1) >>> df 0 AAH 1 AAR.UN 2 AAR.UN 3 AAV 4 AAV 
 def change_to_date(string): seq = (string[:2],string[2:5],string[5:]) return '-'.join(seq) pt['DATE'] = pt['DATE'].apply(change_to_date) 

Apliqué una función simple a la columna para manipular todos los valores de cadena, para un problema algo similar.