Die Herausforderung Einer der schwierigsten Aspekte bei der Beantwortung von SO-Fragen ist die Zeit, die zum erneuten Erstellen des Problems (einschließlich der Daten) benötigt wird. Fragen, bei denen die Daten nicht eindeutig reproduziert werden können, werden mit geringerer Wahrscheinlichkeit beantwortet. Da Sie sich die Zeit nehmen, eine Frage zu schreiben, und ein Problem haben, bei dem Sie Hilfe benötigen, können Sie sich leicht selbst helfen, indem Sie Daten bereitstellen, die andere zur Lösung Ihres Problems verwenden können.
Die Anweisungen von @Andy zum Schreiben guter Pandas-Fragen sind ein ausgezeichneter Ausgangspunkt. Weitere Informationen finden Sie unter Fragen und Erstellen von minimalen, vollständigen und überprüfbaren Beispielen .
Bitte geben Sie Ihre Frage im Voraus klar an. Nachdem Sie sich die Zeit genommen haben, Ihre Frage und einen Beispielcode zu schreiben, versuchen Sie, diese zu lesen und Ihrem Leser eine Zusammenfassung zu geben, in der das Problem zusammengefasst und die Frage klar angegeben wird.
Ursprüngliche Frage :
Ich habe diese Daten ...
Ich möchte das machen...
Ich möchte, dass mein Ergebnis so aussieht ...
Wenn ich jedoch versuche, [dies] zu tun, erhalte ich das folgende Problem ...
Ich habe versucht, Lösungen zu finden, indem ich [dies] und [das] getan habe.
Wie behebe ich das?
Abhängig von der Datenmenge, dem Beispielcode und den bereitgestellten Fehlerstapeln muss der Leser einen langen Weg zurücklegen, bevor er das Problem versteht. Versuchen Sie, Ihre Frage so zu wiederholen, dass die Frage selbst oben steht, und geben Sie dann die erforderlichen Details an.
Überarbeitete Frage :
Frage: Wie kann ich das tun?
Ich habe versucht, Lösungen zu finden, indem ich [dies] und [das] getan habe.
Wenn ich versucht habe, [dies] zu tun, bekomme ich das folgende Problem ...
Ich möchte, dass meine Endergebnisse so aussehen ...
Hier ist ein minimaler Code, der mein Problem reproduzieren kann ...
Und so erstellen Sie meine Beispieldaten neu:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
MACHEN SIE BEISPIELDATEN BEISPIEL !!!
Manchmal reicht nur der Kopf oder das Ende des DataFrame aus. Sie können auch die von @JohnE vorgeschlagenen Methoden verwenden, um größere Datensätze zu erstellen, die von anderen reproduziert werden können. Verwenden Sie sein Beispiel, um einen 100-Zeilen-DataFrame mit Aktienkursen zu generieren:
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) })
Wenn dies Ihre tatsächlichen Daten waren, möchten Sie möglicherweise nur den Kopf und / oder das Ende des Datenrahmens wie folgt angeben (stellen Sie sicher, dass Sie alle vertraulichen Daten anonymisieren):
>>> 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'}}
Möglicherweise möchten Sie auch eine Beschreibung des DataFrame bereitstellen (wobei nur die entsprechenden Spalten verwendet werden). Dies erleichtert es anderen, die Datentypen jeder Spalte zu überprüfen und andere häufige Fehler zu identifizieren (z. B. Datumsangaben als Zeichenfolge vs. Datum / Uhrzeit64 vs. Objekt):
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)
HINWEIS: Wenn Ihr DataFrame über einen MultiIndex verfügt:
Wenn Ihr DataFrame über einen Multiindex verfügt, müssen Sie vor dem Aufruf zunächst einen Reset durchführen to_dict
. Anschließend müssen Sie den Index neu erstellen mit 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