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

Dienstag 4. Mai 2021, 07:52

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: 9650
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 4. Mai 2021, 08:11

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.
"Herr Fachmann, wie bohre ich mir ein Loch ins Knie?"

"Das sollten sie nicht tun! Und wenn man operiert, muss man auf Hygiene achten, und nicht einen Bohrer, der gerade in der Wand ein Loch gebohrt hat, nehmen."

"Das war nicht meine fachliche Frage!!"
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Dienstag 4. Mai 2021, 08:56

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: 14386
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Dienstag 4. Mai 2021, 11:54

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: 14386
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 4. Mai 2021, 12:06

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

Dienstag 4. Mai 2021, 12:45

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: 9650
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 4. Mai 2021, 12:52

Du kannst Pandas sagen, dass eine Spalte ein Datum enthält. Und sogar das Format angeben. Schau mal in die Doku.
"Herr Fachmann, wie bohre ich mir ein Loch ins Knie?"

"Das sollten sie nicht tun! Und wenn man operiert, muss man auf Hygiene achten, und nicht einen Bohrer, der gerade in der Wand ein Loch gebohrt hat, nehmen."

"Das war nicht meine fachliche Frage!!"
Scamander_1920
User
Beiträge: 31
Registriert: Sonntag 26. November 2017, 11:57

Dienstag 4. Mai 2021, 13:22

Danke, jetzt hab ichs :).
Antworten