konstante Indexabstände pandas

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Ich habe ein pandas DataFrame, bei dem der Index eine Zeit ist und ich 4 weiter Einträge pro Zeile habe.

Code: Alles auswählen

                      	a                      b                     c             d 
Zeit                                                                    
03-05-2021 16:21:49  5348.0            535.55             0.0        NaN
03-05-2021 16:22:20  5289.0            431.76             0.0        NaN
03-05-2021 17:22:50  5255.0            421.67             0.0        NaN
03-05-2021 17:23:20  5218.0            431.44             0.0        NaN
03-05-2021 17:23:50  5153.0            440.81             0.0        NaN
Wenn ich dieses Dataframe jetzt in einer Grafik darstellen will, dann ist sie total verzerrt, weil zwischen den Indexen nicht immer der gleiche Zeitabstand liegt.

Gibt es in pandas eine Methode solche Lücken zu füllen, um damit einen richtigen Graphen anzeigen zu können?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Statt die Lücken zu füllen benutzt man einfach die Zeitstempel für die x-Achse. Dadurch platziert matplotlib die an der korrekten Stelle.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Muss ich die Zeit von dem String in ein Objekt der Bibiliothek datetime wandeln oder reicht schon der String?
Kann das Bokeh auch?
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich muß das eine Zeit sein, also vom Typ Datetime und nicht irgendein String. Das Umwandeln sollte eigentlich schon beim Laden erledigt sein.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Sirius3 hat geschrieben: Dienstag 4. Mai 2021, 09:04 Natürlich muß das eine Zeit sein, also vom Typ Datetime und nicht irgendein String. Das Umwandeln sollte eigentlich schon beim Laden erledigt sein.
Das umwandeln wurde beim Laden nicht automatisch gemacht und auch

Code: Alles auswählen

df.index.astype(datetime.datetime)
) hat nichts gebracht:
Bild
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann liegt doch der Fehler beim Laden, und den Code solltest Du uns zeigen.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Code: Alles auswählen

csv =pd.read_csv("../stats.csv",sep=";",index_col="Zeit",decimal=".")
csv.index.astype(datetime.datetime)
csv.plot()
plt.show()
print(csv)
und die stats.csv sieht so aus:

Code: Alles auswählen

Zeit;a;b;c;d
03-05-2021 16:21:49;5348.0;535.55;0.0;
03-05-2021 16:22:20;5289.0;431.76;0.0;
03-05-2021 16:22:50;5255.0;421.67;0.0;
03-05-2021 16:23:20;5218.0;431.44;0.0;
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst Pandas sagen, dass eine Spalte ein Datum enthält. Und sogar das Format angeben. Schau mal in die Doku.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Danke, jetzt hab ichs :).
Antworten