¿Cómo puedo cargar datos de manera efectiva en las preguntas de Stack Overflow usando pandas read_clipboard?
Noto que muchas preguntas de pandas en Stack Overflow solo incluyen algunas filas de sus datos como texto, sin el código adjunto para generarlo / reproducirlo. Soy consciente de la existencia, read_clipboardpero no puedo averiguar cómo llamar eficazmente a esta función para leer datos en muchas situaciones, como cuando hay espacios en blanco en los nombres de los encabezados u objetos de Python como listas en las columnas.
¿Cómo puedo usar de manera pd.read_clipboard
más efectiva para leer datos pegados en formatos no convencionales que no se prestan a una lectura fácil usando los argumentos predeterminados? ¿Hay situaciones en las que se read_clipboard
queda corto?
Respuestas
read_clipboard: Guía para principiantes
read_clipboardes realmente una gracia salvadora para cualquiera que comience a responder preguntas en la etiqueta pandas . Desafortunadamente, los veteranos de los pandas también saben que los datos proporcionados en las preguntas no siempre son fáciles de asimilar en un terminal debido a varias complicaciones en el formato de los datos publicados.
Afortunadamente, read_clipboard
tiene argumentos que hacen posible (y fácil) manejar la mayoría de estos casos. A continuación, se muestran algunos casos de uso comunes y sus argumentos correspondientes.
Casos de uso común
read_clipboard
utiliza read_csv
bajo el capó con separador de espacios en blanco, por lo que muchas de las técnicas para analizar datos de CSV se aplican aquí, como
analizar columnas con espacios en los datos
usar
sep
con argumento regex. Primero, asegúrese de que haya al menos dos espacios entre columnas y como máximo un espacio en blanco consecutivo dentro de los datos de la columna. Luego, puede usar losep=r'\s{2,}'
que significa "columnas separadas buscando al menos dos espacios en blanco consecutivos para el separador" (nota:engine='python'
es obligatorio para separadores de expresiones regulares o multichar):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
Consulte también ¿Cómo maneja los nombres de columna que tienen espacios en ellos cuando usa pd.read_clipboard? .
leer una serie en lugar de DataFrame
utilizar
squeeze=true
, probablemente también necesitaráheader=None
si la primera fila también es de datos.s = pd.read_clipboard(..., header=None, squeeze=True)
Consulte también ¿Podría haber una forma más fácil de usar pandas read_clipboard para leer una serie? .
cargar datos con nombres de encabezados personalizados
utilizar
names=[...]
junto conheader=None
eskiprows=[0]
ignorar los encabezados existentes.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
cargando datos sin encabezados
- utilizar
header=None
- utilizar
establecer una o más columnas como índice
- utilizar
index_col=[...]
con la etiqueta o índice adecuados
- utilizar
analizar fechas
- utilizar
parse_dates
con el formato apropiado. Si está analizandodatetimes
(es decir, columnas con fecha separadas por una marca de tiempo), es probable que también necesite usarsep=r'\s{2,}'
mientras se asegura de que sus columnas estén separadas por al menos dos espacios.
- utilizar
Vea esta respuesta mía para obtener una lista más completa de read_csv
argumentos para otros casos no cubiertos aquí ...
Advertencias
read_clipboard
es una navaja suiza. De todos modos, eso
no puede leer datos en formatos prettytable / tabular (IOW, los bordes lo hacen más difícil)
- Ver ¿ Lectura en un marco de datos bastante impreso / formateado usando pd.read_clipboard? en busca de soluciones para abordar esto.
no se pueden analizar correctamente los índices múltiples a menos que se especifiquen todos los elementos del índice.
- Consulte ¿ Copiar marcos de datos MultiIndex con pd.read_clipboard? en busca de soluciones para abordar esto.
no puede ignorar / manejar elipses en los datos
- mi método sugerido es eliminar manualmente las elipses antes de imprimir
no puede analizar columnas de listas (u otros objetos) como algo que no sea una cadena. Las columnas deberán convertirse por separado, como se muestra en ¿Cómo se lee en un marco de datos con listas usando pd.read_clipboard? .
no puede leer texto de imágenes (así que no use imágenes como un medio para compartir sus datos con la gente, ¡por favor!)
La única debilidad de esta función es que no captura el contenido de CTRL + C
si la copia se realiza desde un PDF
archivo. Probarlo de esta manera da como resultado una lectura vacía.
Pero al usar un editor de texto normal, funciona bien. Aquí hay un ejemplo que usa texto escrito al azar:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []