Tengo un marco de datos en pandas con columnas de datos int y str mixtas. Quiero concatenar primero las columnas dentro del marco de datos. Para hacer eso, tengo que convertir una int
columna a str
. Intenté hacer lo siguiente:
mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])
o
mtrx['X.3'] = mtrx['X.3'].astype(str)
pero en ambos casos no funciona y aparece un error que dice "no se pueden concatenar objetos 'str' e 'int'". Concatenar dos str
columnas funciona perfectamente bien.
Respuestas:
Convertir una serie
No olvide volver a asignar el resultado:
Convertir todo el marco
fuente
Cambiar el tipo de datos de la columna DataFrame:
Para int:
df.column_name = df.column_name.astype(np.int64)
Para str:
df.column_name = df.column_name.astype(str)
fuente
apply(str)
de @Jeff, en mi prueba usandopd.Series(np.arange(1000000))
.df['A'] = df['A'].apply(str)
también funciona. La respuesta proporcionada por @Jeff no me funciona.apply()
lugar deastype()
: timeit.Timer ('c.apply (str)', setup = 'import pandas as pd; c = pd.Series (range ( 1000)) '). Timeit (1000) >>> 0.41499893204309046 >>> timeit.Timer (' c.astype (str) ', setup =' importar pandas como pd; c = pd.Series (range (1000)) ' ) .timeit (1000) 0.8004439630312845Advertencia : Ambas soluciones proporcionadas ( astype () y apply () ) no conservan los valores NULL en la forma nan o None.
Creo que esto se soluciona mediante la implementación de to_string ()
fuente
Utilice el siguiente código:
fuente
Solo como referencia adicional.
Todas las respuestas anteriores funcionarán en el caso de un marco de datos. Pero si está utilizando lambda mientras crea / modifica una columna, esto no funcionará, porque allí se considera un atributo int en lugar de una serie pandas. Tienes que usar str (target_attribute) para convertirlo en una cadena. Consulte el siguiente ejemplo.
fuente