Seguí el siguiente procedimiento: En Python, ¿cómo convierto todos los elementos de una lista en flotantes? porque cada columna de mi marco de datos es una list , pero en lugar de floats , elegí cambiar todos los valores a strings .
df = [str(i) for i in df]
Pero esto fracasó.
Simplemente borró todos los datos excepto la primera fila de nombres de columna.
Luego, probar df = [str(i) for i in df.values] resultó en cambiar todo el marco de datos en una gran lista, pero eso estropea demasiado los datos para poder cumplir con el objetivo de mi secuencia de comandos, que es exportar el marco de datos a mi tabla de Oracle.
¿Hay alguna manera de convertir todos los elementos que están en mi marco de datos que NO son cadenas en cadenas?
Puedes usar esto:
df = df.astype(str)por curiosidad, decidí ver si hay alguna diferencia en la eficiencia entre la solución aceptada y la mía.
Los resultados están a continuación:
ejemplo df:
df = pd.DataFrame([list(range(1000))], index=[0]) prueba df.astype :
%timeit df.astype(str) >> 100 loops, best of 3: 2.18 ms per loop prueba df.applymap :
%timeit df.applymap(str) 1 loops, best of 3: 245 ms per loop Parece que df.astype es mucho más rápido :)
Puedes usar el método applymap :
df = df.applymap(str)Con pandas >= 1.0 ahora hay un tipo de datos de cadena dedicado:
Puede convertir su columna a este tipo de datos de cadena de pandas usando .astype('string') :
df = df.astype('string') Esto es diferente de usar str que establece el tipo de datos 'objeto' de pandas:
df = df.astype(str)Puede ver la diferencia en los tipos de datos cuando observa la información del marco de datos:
df = pd.DataFrame({ 'zipcode_str': [90210, 90211] , 'zipcode_string': [90210, 90211], }) df['zipcode_str'] = df['zipcode_str'].astype(str) df['zipcode_string'] = df['zipcode_str'].astype('string') df.info() # you can see that the first column has dtype object # while the second column has the new dtype string # Column Non-Null Count Dtype --- ------ -------------- ----- 0 zipcode_str 2 non-null object 1 zipcode_string 2 non-null string dtypes: object(1), string(1)
De los documentos:
El tipo de extensión 'string' resuelve varios problemas con las matrices NumPy object-dtype:
1) Puede almacenar accidentalmente una combinación de cadenas y no cadenas en una matriz de tipo de objeto. Un StringArray solo puede almacenar cadenas.
2) object dtype rompe operaciones específicas de dtype como DataFrame.select_dtypes(). No hay una forma clara de seleccionar solo texto mientras se excluyen las columnas que no son de texto, pero que aún son de tipo objeto.
3) Al leer código, el contenido de una matriz de tipo de objeto es menos claro que una cadena.
Puede encontrar información sobre pandas 1.0 aquí:
https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html