El desafío Uno de los aspectos más difíciles de responder a las preguntas de SO es el tiempo que lleva recrear el problema (incluidos los datos). Las preguntas que no tienen una forma clara de reproducir los datos tienen menos probabilidades de ser respondidas. Dado que se está tomando el tiempo para escribir una pregunta y tiene un problema con el que le gustaría recibir ayuda, puede ayudarse fácilmente al proporcionar datos que otros pueden usar para ayudar a resolver su problema.
Las instrucciones proporcionadas por @Andy para escribir buenas preguntas de Pandas son un excelente lugar para comenzar. Para obtener más información, consulte cómo preguntar y cómo crear ejemplos mínimos, completos y verificables .
Indique claramente su pregunta por adelantado. Después de tomarse el tiempo para escribir su pregunta y cualquier código de muestra, intente leerlo y proporcione un 'Resumen Ejecutivo' para su lector que resuma el problema y que establezca claramente la pregunta.
Pregunta original :
Tengo estos datos ...
Quiero hacer esto...
Quiero que mi resultado se vea así ...
Sin embargo, cuando trato de hacer [esto], me sale el siguiente problema ...
He tratado de encontrar soluciones haciendo [esto] y [eso].
¿Cómo lo soluciono?
Dependiendo de la cantidad de datos, código de muestra y pilas de errores proporcionados, el lector debe recorrer un largo camino antes de comprender cuál es el problema. Intente volver a plantear su pregunta para que la pregunta esté en la parte superior y luego proporcione los detalles necesarios.
Pregunta revisada :
Qustion: ¿Cómo puedo hacer [esto]?
He tratado de encontrar soluciones haciendo [esto] y [eso].
Cuando intenté hacer [esto], me sale el siguiente problema ...
Me gustaría que mis resultados finales se vean así ...
Aquí hay un código mínimo que puede reproducir mi problema ...
Y aquí está cómo recrear mis datos de muestra:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
PROPORCIONE DATOS DE MUESTRA SI ES NECESARIO !!!
A veces, solo la cabeza o la cola del DataFrame es todo lo que se necesita. También puede usar los métodos propuestos por @JohnE para crear conjuntos de datos más grandes que otros puedan reproducir. Usando su ejemplo para generar un DataFrame de 100 filas de precios de acciones:
stocks = pd.DataFrame({
'ticker':np.repeat( ['aapl','goog','yhoo','msft'], 25 ),
'date':np.tile( pd.date_range('1/1/2011', periods=25, freq='D'), 4 ),
'price':(np.random.randn(100).cumsum() + 10) })
Si estos fueron sus datos reales, es posible que desee incluir el encabezado y / o la cola del marco de datos de la siguiente manera (asegúrese de anonimizar los datos confidenciales):
>>> stocks.head(5).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319},
'ticker': {0: 'aapl', 1: 'aapl', 2: 'aapl', 3: 'aapl', 4: 'aapl'}}
>>> pd.concat([stocks.head(), stocks.tail()], ignore_index=True).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00'),
5: Timestamp('2011-01-24 00:00:00'),
6: Timestamp('2011-01-25 00:00:00'),
7: Timestamp('2011-01-25 00:00:00'),
8: Timestamp('2011-01-25 00:00:00'),
9: Timestamp('2011-01-25 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319,
5: 10.017209045035006,
6: 10.57090128181566,
7: 11.442792747870204,
8: 11.592953372130493,
9: 12.864146419530938},
'ticker': {0: 'aapl',
1: 'aapl',
2: 'aapl',
3: 'aapl',
4: 'aapl',
5: 'msft',
6: 'msft',
7: 'msft',
8: 'msft',
9: 'msft'}}
Es posible que también desee proporcionar una descripción del DataFrame (utilizando solo las columnas relevantes). Esto facilita que otros verifiquen los tipos de datos de cada columna e identifiquen otros errores comunes (por ejemplo, fechas como cadena frente a fecha y hora 64 frente a objeto):
stocks.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
date 100 non-null datetime64[ns]
price 100 non-null float64
ticker 100 non-null object
dtypes: datetime64[ns](1), float64(1), object(1)
NOTA: Si su DataFrame tiene un MultiIndex:
Si su DataFrame tiene un índice múltiple, primero debe reiniciar antes de llamar to_dict
. Luego debe volver a crear el índice con set_index
:
# MultiIndex example. First create a MultiIndex DataFrame.
df = stocks.set_index(['date', 'ticker'])
>>> df
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059
...
# After resetting the index and passing the DataFrame to `to_dict`, make sure to use
# `set_index` to restore the original MultiIndex. This DataFrame can then be restored.
d = df.reset_index().to_dict()
df_new = pd.DataFrame(d).set_index(['date', 'ticker'])
>>> df_new.head()
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059