Ich habe meine Serie genommen und sie in eine Datums- / Uhrzeitspalte von dtype = gezwungen datetime64[ns]
(obwohl ich nur eine Tagesauflösung benötige ... nicht sicher, wie ich sie ändern soll).
import pandas as pd
df = pd.read_csv('somefile.csv')
column = df['date']
column = pd.to_datetime(column, coerce=True)
aber das Plotten funktioniert nicht:
ipdb> column.plot(kind='hist')
*** TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('float64')
Ich möchte ein Histogramm zeichnen, das nur die Anzahl der Daten nach Woche, Monat oder Jahr anzeigt .
Sicher gibt es eine Möglichkeit, dies zu tun pandas
?
python
pandas
matplotlib
time-series
Lollercoaster
quelle
quelle
Antworten:
Angesichts dieser df:
und wenn es nicht schon der Fall ist:
So zeigen Sie die Anzahl der Daten pro Monat an:
.dt
Ermöglicht den Zugriff auf die datetime-Eigenschaften.Welches wird Ihnen geben:
Sie können Monat für Jahr, Tag usw. ersetzen.
Wenn Sie beispielsweise Jahr und Monat unterscheiden möchten, gehen Sie einfach wie folgt vor:
Welches gibt:
War es was du wolltest? Ist das klar?
Hoffe das hilft !
quelle
date
oderDate
hier sind Spaltennamen. Wenn Ihre Spalte mit Datumsangaben also foo heißt, wäre dies:df.foo.dt.month
groupby
Kombinationen aus zwei Attributen von Spaltendaten (z. B. Jahr und Datum) zu erstellen?Ich denke, Resample könnte das sein, wonach Sie suchen. In Ihrem Fall tun Sie:
Es wird nur gezählt und nicht die Handlung, also müssen Sie Ihre eigenen Handlungen erstellen.
In diesem Beitrag finden Sie weitere Informationen zur Dokumentation der Resample- Pandas-Resample-Dokumentation
Ich bin auf ähnliche Probleme gestoßen wie Sie. Hoffe das hilft.
quelle
how
ist veraltet. Die neue Syntax istdf.resample('1M').count()
Beispiel gerendert
Beispielcode
quelle
Ich konnte dies umgehen, indem ich (1) mit matplotlib plottete, anstatt den Datenrahmen direkt zu verwenden, und (2) das
values
Attribut verwendete. Siehe Beispiel:Das funktioniert nicht, wenn ich es nicht benutze
values
, aber ich weiß nicht, warum es funktioniert.quelle
Hier ist eine Lösung, wenn Sie nur ein Histogramm haben möchten, wie Sie es erwarten. Dies verwendet nicht groupby, sondern konvertiert datetime-Werte in Ganzzahlen und ändert die Beschriftungen im Plot. Es könnten einige Verbesserungen vorgenommen werden, um die Häkchenbeschriftungen an gleichmäßige Stellen zu verschieben. Auch bei Annäherung ist ein Kernel-Dichteschätzungsdiagramm (und jedes andere Diagramm) möglich.
quelle
Ich denke, um dieses Problem zu lösen, können Sie diesen Code verwenden. Er konvertiert den Datumstyp in int-Typen:
Um nur das Datum zu erhalten, können Sie diesen Code hinzufügen:
quelle
Ich hatte auch nur Probleme damit. Ich stelle mir vor, dass Sie, da Sie mit Daten arbeiten, die chronologische Reihenfolge beibehalten möchten (wie ich).
Die Problemumgehung ist dann
Bitte, wenn jemand einen besseren Weg kennt, sprechen Sie bitte.
BEARBEITEN: Für Jean oben ist hier eine Auswahl der Daten [Ich habe zufällig aus dem vollständigen Datensatz eine Stichprobe gezogen, daher die trivialen Histogrammdaten.]
Ausgabe:
quelle
Alle diese Antworten scheinen zu komplex zu sein, zumindest bei "modernen" Pandas sind es zwei Zeilen.
quelle
DataFrame
, aber nicht, wenn Sie nur eine habenSeries
. Würden Sie in Betracht ziehen, einen Hinweis zu diesem Fall hinzuzufügen?