He seguido Datarame
df = pd.DataFrame({ 'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7], 'col_3': [14, 15, 16, 19] })
Intento convertir el numérico en cadena y luego combino cada fila en una cadena
Puedo lograr esto usando:
df.apply(lambda x : ''.join(x.astype(str)),1) Out[209]: 0 0414 1 1515 2 2616 3 3719 dtype: object# notice here dtype is object
Esta es la pregunta
Entonces, trato de usar la sum
df.astype(str).sum(1) Out[211]: 0 414.0 1 1515.0 2 2616.0 3 3719.0 dtype: float64
Note que aquí el dtype
convierte en object
float
no.
Aquí hay más información:
df.astype(str).applymap(type) Out[221]: col_1 col_2 col_3 0 1 2 3
¿Por qué sum
tiene este comportamiento cableado? ¿Hay alguna manera de bloquearlo convertir str
nuevo a float
?
Gracias por tu ayuda 🙂
La sum no funcionó porque al devolver la serie, ya que solo hay números que se convirtió al formato de tipo de dato flotante respectivo. Solo será object
si se trata de mixed datatype
al aplicar funciones estándar.
Por ejemplo cuando haces
df = pd.DataFrame({ 'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7], 'col_3': [14, 15, 16, 'b'] }) df.astype(str).sum(1)
Salida:
0 0414 1 1515 2 2616 3 37b dtype: objeto
Una alternativa para hacer la sum es con cumsum por lo que se preservará el dtype, es decir,
s = df.astype(str).cumsum(1).iloc[:,-1]
Salida:
0 0414 1 1515 2 2616 3 3719 Nombre: col_3, dtype: objeto
Espero eso ayude
Si quieres usar algunos, puedes intentarlo de esta manera:
df.astype(str).apply(lambda x: x.sum(),1)
Salida:
0 0414 1 1515 2 2616 3 3719 dtype: object