Para probar alguna funcionalidad, me gustaría crear un a DataFrame
partir de una cadena. Digamos que mis datos de prueba se ven así:
TESTDATA="""col1;col2;col3
1;4.4;99
2;4.5;200
3;4.7;65
4;3.2;140
"""
¿Cuál es la forma más sencilla de leer esos datos en un pandas DataFrame
?
from pandas.compat import StringIO
, teniendo en cuenta que es la misma clase que la que viene con Python.pd.read_table()
es una función equivalente, sólo un poco mejor nomenclatura:df = pd.read_table(TESTDATA, sep=";")
.pandas.compat.StringIO
. De esa manera no tenemos que importar porStringIO
separado. Sin embargo, elpandas.compat
paquete se considera privado de acuerdo con pandas.pydata.org/pandas-docs/stable/api.html?highlight=compat, por lo que deja la respuesta como está por ahora.df.to_csv(TESTDATA)
, useTESTDATA.seek(0)
Método dividido
fuente
df = pd.DataFrame([x.split(';') for x in data.split('\n')[1:]], columns=[x for x in data.split('\n')[0].split(';')])
Una solución rápida y fácil para el trabajo interactivo es copiar y pegar el texto cargando los datos del portapapeles.
Seleccione el contenido de la cadena con el mouse:
En el uso de la shell Python
read_clipboard()
Use el separador apropiado:
fuente
Esta respuesta se aplica cuando una cadena se ingresa manualmente, no cuando se lee desde algún lugar.
Un CSV tradicional de ancho variable es ilegible para almacenar datos como una variable de cadena. Especialmente para usar dentro de un
.py
archivo, considere en su lugar datos separados por tuberías de ancho fijo. Varios IDE y editores pueden tener un complemento para formatear texto separado por tuberías en una tabla ordenada.Utilizando
read_csv
Almacene lo siguiente en un módulo de utilidad, por ejemplo
util/pandas.py
. Se incluye un ejemplo en la cadena de documentación de la función.Alternativas que no funcionan
El siguiente código no funciona correctamente porque agrega una columna vacía en los lados izquierdo y derecho.
En cuanto a
read_fwf
, en realidad no usa tantos kwargs opcionales queread_csv
acepta y usa. Como tal, no debe usarse para datos separados por tuberías.fuente
read_fwf
toma másread_csv
argumentos de lo que se documenta, pero es cierto que algunos no tienen ningún efecto .La manera más simple es guardarlo en un archivo temporal y luego leerlo:
Forma correcta de crear un archivo temporal: ¿Cómo puedo crear un archivo tmp en Python?
fuente