Cómo proporcionar una copia reproducible de su DataFrame con to_clipboard()

Resuelto Trenton McKinney asked hace 6 años • 2 respuestas

2018-09-18_reproducible_dataframe.ipynb

  • Esta pregunta se marcó anteriormente como un duplicado de Cómo hacer buenos ejemplos de pandas reproducibles. .
    • Vaya a esa pregunta si necesita crear datos sintéticos (falsos) para compartir.
    • La otra pregunta y las respuestas asociadas cubren cómo crear un marco de datos reproducible.
    • No cubren cómo copiar un marco de datos existente .to_clipboard, mientras que esta pregunta cubre específicamente .to_clipboard.

  • Esta puede parecer una pregunta obvia. Sin embargo, muchos de los usuarios que hacen preguntas sobre Pandas son nuevos e inexpertos.
  • Un componente fundamental al hacer una pregunta es Cómo crear un ejemplo mínimo, completo y verificable , que explica "qué" y "por qué", pero no "cómo".

Por ejemplo, como OP , puedo tener el siguiente marco de datos:

  • Para este ejemplo, creé datos sintéticos, que es una opción para crear un conjunto de datos reproducible, pero no está dentro del alcance de esta pregunta.
  • Piense en esto, como si hubiera cargado un archivo y solo necesitara compartir una parte para reproducir el error.
import pandas as pd
import numpy as np
from datetime import datetime
from string import ascii_lowercase as al

np.random.seed(365)
rows = 15
cols = 2
data = np.random.randint(0, 10, size=(rows, cols))
index = pd.bdate_range(datetime.today(), freq='d', periods=rows)

df = pd.DataFrame(data=data, index=index, columns=list(al[:cols]))

            a  b
2020-07-30  2  4
2020-07-31  1  5
2020-08-01  2  2
2020-08-02  9  8
2020-08-03  4  0
2020-08-04  3  3
2020-08-05  7  7
2020-08-06  7  0
2020-08-07  8  4
2020-08-08  3  2
2020-08-09  6  2
2020-08-10  6  8
2020-08-11  9  6
2020-08-12  1  6
2020-08-13  5  7
  • El marco de datos podría ir seguido de algún otro código que produzca un error o no produzca el resultado deseado.

Cosas que se deben proporcionar al hacer una pregunta sobre Stack Overflow.

  • Una pregunta coherente y bien escrita, como texto formateado.
  • El código que produce el error, como texto formateado.
  • El seguimiento completo del error, como texto formateado
  • Potencialmente, el resultado actual y esperado, como texto formateado o imagen si se trata de un gráfico.
  • Los datos, en un formato fácilmente utilizable , como texto formateado.

No agregue sus datos como respuesta a esta pregunta.

Trenton McKinney avatar Sep 20 '18 02:09 Trenton McKinney
Aceptado

Primero: No publicar imágenes de datos, solo texto por favor

Segundo: no pegue datos en la sección de comentarios ni como respuesta, edite su pregunta


Cómo proporcionar rápidamente datos de muestra de un DataFrame de pandas

  • Hay más de una manera de responder a esta pregunta. Sin embargo, esta respuesta no pretende ser una solución exhaustiva. Proporciona el método más simple posible.
  • Para los curiosos, existen otras soluciones más detalladas en Stack Overflow.
  1. Proporcione un enlace a un conjunto de datos que se pueda compartir (tal vez en GitHub o un archivo compartido en Google). Esto es particularmente útil si se trata de un conjunto de datos grande y el objetivo es optimizar algún método. El inconveniente es que es posible que los datos ya no estén disponibles en el futuro, lo que reduce el beneficio del puesto.
    • Los datos deben proporcionarse en la pregunta, pero pueden ir acompañados de un enlace a un conjunto de datos más extenso.
    • No publique solo un enlace o una imagen de los datos.
  2. Proporcionar la salida dedf.head(10).to_clipboard(sep=',', index=True)

Código:

Proporcionar la salida depandas.DataFrame.to_clipboard

df.head(10).to_clipboard(sep=',', index=True)
  • Si tiene un DataFrame de índices múltiples, agregue una nota que indique qué columnas son los índices.
  • Nota : cuando se ejecuta la línea de código anterior, no aparecerá ningún resultado.
    • El resultado del código ahora está en el portapapeles.
  • Pega el portapapeles en code blocktu pregunta de Stack Overflow
,a,b
2020-07-30,2,4
2020-07-31,1,5
2020-08-01,2,2
2020-08-02,9,8
2020-08-03,4,0
2020-08-04,3,3
2020-08-05,7,7
2020-08-06,7,0
2020-08-07,8,4
2020-08-08,3,2
  • Alguien que intente responder a su pregunta puede copiarlo en el portapapeles y seguir:
df = pd.read_clipboard(sep=',')

Ubicaciones del marco de datos distintas de las.head(10)

  • Especifique una sección del marco de datos con la .ilocpropiedad
  • El siguiente ejemplo selecciona las filas 3 a 11 y todas las columnas.
df.iloc[3:12, :].to_clipboard(sep=',')

Referencias adicionales parapd.read_clipboard

  • ¿Especificar columnas de varios niveles usando pd.read_clipboard?
  • ¿Cómo se manejan los nombres de columnas que tienen espacios cuando se usa pd.read_clipboard?
  • ¿Cómo manejar un índice con nombre personalizado al copiar un marco de datos usando pd.read_clipboard?

Usuarios de Google Colab

  • .to_clipboard()no funcionará
  • Úselo .to_dict()para copiar su marco de datos
# if you have a datetime column, convert it to a str
df['date'] = df['date'].astype('str')

# if you have a datetime index, convert it to a str
df.index = df.index.astype('str')

# output to a dict
df.head(10).to_dict(orient='index')

# which will look like
{'2020-07-30': {'a': 2, 'b': 4},
 '2020-07-31': {'a': 1, 'b': 5},
 '2020-08-01': {'a': 2, 'b': 2},
 '2020-08-02': {'a': 9, 'b': 8},
 '2020-08-03': {'a': 4, 'b': 0},
 '2020-08-04': {'a': 3, 'b': 3},
 '2020-08-05': {'a': 7, 'b': 7},
 '2020-08-06': {'a': 7, 'b': 0},
 '2020-08-07': {'a': 8, 'b': 4},
 '2020-08-08': {'a': 3, 'b': 2}}

# copy the previous dict and paste into a code block on SO
# the dict can be converted to a dataframe with 
# df = pd.DataFrame.from_dict(d, orient='index')  # d is the name of the dict
# convert datatime column or index back to datetime
  • Para una respuesta más completa usando.to_dict()
    • Cómo compartir fácilmente un marco de datos de muestra usando df.to_dict()
    • Cómo hacer buenos ejemplos de pandas reproducibles
Trenton McKinney avatar Sep 19 '2018 19:09 Trenton McKinney

Si hace algo como print(df.head(20))pegar el resultado en formato de código, entonces podemos usarlo pd.read_clipboard()para cargar los datos en un marco de datos. Este enfoque funciona para la gran mayoría de las preguntas publicadas bajo la pandasetiqueta, pero falla estrepitosamente en las preguntas que involucranmultiindex

Yuca avatar Sep 19 '2018 19:09 Yuca