La sfida Uno degli aspetti più difficili della risposta alle domande SO è il tempo necessario per ricreare il problema (compresi i dati). Le domande che non hanno un modo chiaro per riprodurre i dati hanno meno probabilità di ricevere risposta. Dato che stai prendendo il tempo per scrivere una domanda e hai un problema che ti piacerebbe aiutare, puoi facilmente aiutarti fornendo dati che gli altri possono quindi utilizzare per aiutare a risolvere il tuo problema.
Le istruzioni fornite da @Andy per scrivere buone domande su Panda sono un ottimo punto di partenza. Per ulteriori informazioni, consultare come chiedere e come creare esempi minimi, completi e verificabili .
Si prega di indicare chiaramente la domanda in anticipo. Dopo aver dedicato del tempo a scrivere la tua domanda e qualsiasi codice di esempio, prova a leggerlo e fornisci un "Riepilogo esecutivo" per il tuo lettore che riassuma il problema e dichiari chiaramente la domanda.
Domanda originale :
Ho questi dati ...
Voglio farlo...
Voglio che il mio risultato sia simile a questo ...
Tuttavia, quando provo a fare [questo], ottengo il seguente problema ...
Ho provato a trovare soluzioni facendo [questo] e [quello].
Come lo aggiusto?
A seconda della quantità di dati, del codice di esempio e degli stack di errori forniti, il lettore deve fare molto prima di capire qual è il problema. Prova a ripetere la domanda in modo che la domanda stessa sia in primo piano, quindi fornisci i dettagli necessari.
Domanda rivista :
Qustion: come posso fare [questo]?
Ho provato a trovare soluzioni facendo [questo] e [quello].
Quando ho provato a fare questo, ho il seguente problema ...
Vorrei che i miei risultati finali fossero così ...
Ecco qualche codice minimo che può riprodurre il mio problema ...
Ed ecco come ricreare i miei dati di esempio:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
FORNIRE DATI CAMPIONE SE NECESSARIO !!!
A volte basta solo la testa o la coda del DataFrame. Puoi anche utilizzare i metodi proposti da @JohnE per creare set di dati più grandi che possono essere riprodotti da altri. Usando il suo esempio per generare un DataFrame di 100 righe dei prezzi delle azioni:
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) })
Se questi erano i tuoi dati effettivi, potresti semplicemente voler includere la testa e / o la coda del frame di dati come segue (assicurati di anonimizzare i dati sensibili):
>>> 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'}}
È inoltre possibile fornire una descrizione di DataFrame (utilizzando solo le colonne pertinenti). Questo rende più facile per gli altri controllare i tipi di dati di ogni colonna e identificare altri errori comuni (ad esempio date come stringa vs. datetime64 vs. oggetto):
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: se DataFrame ha un MultiIndex:
Se DataFrame ha un multiindex, è necessario reimpostare prima di chiamare to_dict
. È quindi necessario ricreare l'indice utilizzando 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