Cómo copiar / pegar DataFrame de StackOverflow en Python

En las preguntas y respuestas , los usuarios a menudo publican un ejemplo de DataFrame que su pregunta / respuesta funciona:

 In []: x Out[]: bar foo 0 4 1 1 5 2 2 6 3 

Sería muy útil poder obtener este DataFrame en mi intérprete de Python para que pueda comenzar a depurar la pregunta o probar la respuesta.

¿Cómo puedo hacer esto?

Las pandas están escritas por personas que realmente saben lo que la gente quiere hacer.

Desde la versión 0.13 hay una función pd.read_clipboard que es absurdamente efectiva para hacer que este “solo funcione”.

Copie y pegue la parte del código en la pregunta que inicia la bar foo (es decir, el dataframe) y haga esto en un intérprete de Python:

 In [53]: import pandas as pd In [54]: df = pd.read_clipboard() In [55]: df Out[55]: bar foo 0 4 1 1 5 2 2 6 3 

Advertencias

  • No incluyas las cosas de iPython In o Out o no funcionará
  • Si tiene un índice con nombre, actualmente necesita agregar engine='python' (vea este problema en GitHub). El motor ‘c’ está actualmente roto cuando se nombra el índice.
  • No es shiny en MultiIndexes:

Prueba esto:

  0 1 2 level1 level2 foo a 0.518444 0.239354 0.364764 b 0.377863 0.912586 0.760612 bar a 0.086825 0.118280 0.592211 

que no funciona en absoluto, o esto:

  0 1 2 foo a 0.859630 0.399901 0.052504 b 0.231838 0.863228 0.017451 bar a 0.422231 0.307960 0.801993 

Lo que funciona, pero devuelve algo totalmente incorrecto!

pd.read_clipboard() es ingenioso. Sin embargo, si está escribiendo código en un script o en un cuaderno (y desea que su código funcione en el futuro) no es una buena opción. Aquí hay una forma alternativa de copiar / pegar la salida de un dataframe en un nuevo objeto de dataframe que asegure que df sobreviva al contenido de su portapapeles:

 import pandas as pd d = '''0 1 2 3 4 AYNNY BNYNN CNNNN DYYNY ENYYY FYYNY GYNN Y''' df = pd.read_csv(pd.compat.StringIO(d), sep='\s+') 

Algunas notas:

  • La cadena entre comillas triples conserva las nuevas líneas en la salida.
  • StringIO envuelve la salida en un objeto similar a un archivo, que requiere read_csv .
  • La configuración de sep a \s+ hace que cada bloque contiguo de espacios en blanco se trate como un solo delimitador.