Datum zu Time hinzufügen mit Überlauf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schwarzesblut93
User
Beiträge: 2
Registriert: Dienstag 27. Dezember 2022, 13:04

Hallo :)

Ich habe folgendes Problem: Ich bekomme nur einen Zeit Stempel aus einem File ohne eine Datumsangabe. Das Datum ist seperat in der Datei gespeichert. Dabei soll ich zu dem Zeit Stempel das Datum anfügen. Das genau Problem ist: Die Messung ist über eine ganze Nacht also zwei Daten, jedoch fügt es mir nur das Anfangsdatum hinzu.
Hier mein Code:

Code: Alles auswählen

# Convert the "Time" column to a list of datetime objects
time_list = [datetime.strptime(time, "%H:%M:%S").time() for time in dfSleepStages['Time']]
# Combine the current date with the time objects to create a list of datetime objects
print(time_list)
datetime_list = [datetime.combine(datetime_object, time) for time in time_list]
dfSleepStages['Time'] = datetime_list
Ausgabe sollte folgerdenmassen sein (Datum ist nicht fix, ändert sich je nach dem welches file ich einlese):
0 2022-12-01 23:26:02 0 0
1 2022-12-01 23:26:32 0 0
2 2022-12-01 23:27:02 0 0
3 2022-12-01 23:27:32 0 0
4 2022-12-01 23:28:02 0 0
.. ... ... ...
754 2022-12-02 05:43:02 4 4
755 2022-12-02 05:43:32 4 4
756 2022-12-02 05:44:02 4 4
757 2022-12-02 05:44:32 4 0
758 2022-12-02 05:45:02 4 4

Ausgabe jetzt ist:
0 2022-12-01 23:26:02 0 0
1 2022-12-01 23:26:32 0 0
2 2022-12-01 23:27:02 0 0
3 2022-12-01 23:27:32 0 0
4 2022-12-01 23:28:02 0 0
.. ... ... ...
754 2022-12-01 05:43:02 4 4
755 2022-12-01 05:43:32 4 4
756 2022-12-01 05:44:02 4 4
757 2022-12-01 05:44:32 4 0
758 2022-12-01 05:45:02 4 4

Ich hoffe ihr könnt mir weiterhelfen.
Liebe Grüsse Regina
Benutzeravatar
__blackjack__
User
Beiträge: 14067
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@schwarzesblut93: Das sieht ja irgendwie schon mal falsch aus eine DataFrame-Spalte durch eine „list comprehension“ zu jagen.

Ich würde da `pandas.to_timedelta()` drauf anwenden, und dann die selektieren, bei denen der Wert so klein ist, dass man davon ausgehen kann, dass das eigentlich schon die Zeit vom nächsten Tag ist und dort einen Tag drauf addieren. Und das kann man dann auf die Datumsspalte addieren.

Und die Lektion ist: Datum und Zeit die zusammen einen Zeitstempel ergeben, speichert man nicht getrennt. Macht nur unnötig Arbeit später.

Du solltest Dir übrigens abgewöhnen irgendwelche Typinformationen im Namen unterzubringen. Also so Grunddatentypen wie `list` haben da nichts zu suchen, und so etwas supergenerisches wie `object` schon gar nicht. `_object` könnte man ja letztlich an *jeden* Namen anhängen, weil alles was man an einen Namen binden kann in Python ein Objekt ist. Da ist kein Informationsgewinn.

Die Namenskollision mit dem Datentyp `datetime` würde ich beim Import auflösen und den wie sich das eigentlich gehört dort dann in `DateTime` umbenennen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
schwarzesblut93
User
Beiträge: 2
Registriert: Dienstag 27. Dezember 2022, 13:04

Ich habe es nicht so gespeichert, sondern die Firma, von welchem ich die Daten bekomme. Ich lese die Daten nur aus, die wir gemessen habe. Im textfile steht nur die Zeiten und die einzelnen Werte zu der Zeit. Und eine Zeile wann die Aufnahme gestartet wurde. Die Daten sind in einem Textfile, dass folgerndenmassen aussieht:
Events Included:
SLEEP-MT
SLEEP-REM
SLEEP-S0
SLEEP-S1
SLEEP-S2
SLEEP-S3

Scoring Session:
Scorer Name: Dreem
Scorer Time: 11/24/22 - 00:40:31

Sleep Stage Time [hh:mm:ss] Event Duration[s]
SLEEP-S0 00:40:31 SLEEP-S0 30
SLEEP-S0 00:41:01 SLEEP-S0 30
SLEEP-S0 00:41:31 SLEEP-S0 30
SLEEP-S0 00:42:01 SLEEP-S0 30
SLEEP-S0 00:42:31 SLEEP-S0 30
SLEEP-S0 00:43:01 SLEEP-S0 30
SLEEP-S0 00:43:31 SLEEP-S0 30
SLEEP-S0 00:44:01 SLEEP-S0 30
SLEEP-S0 00:44:31 SLEEP-S0 30
SLEEP-S0 00:45:01 SLEEP-S0 30
Und irgendwie muss ich dies zusammenfügen. Damit es einen eindeutigen Zeit Stempel hat. Um mit einer anderen Datei zuvergleichen könne, die eben datum und zeit Stempel hat.
Benutzeravatar
__blackjack__
User
Beiträge: 14067
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@schwarzesblut93: Naja da musst Du doch nur die Stellen finden wo eine Tagesgrenze überschritten wird, also wo es von einer hohen Zeit wieder zu einer niedrigen Zeit wechselt. In dem gezeigten Beispiel ist das ja alles von einem Tag. Und es muss natürlich sicher sein, dass es in den Daten keine Lücke gibt, die über einen Tag hinaus geht, weil man das dann nicht erkennen kann.

Falls die einzelnen Zeilen dagegen ”lückenlos” sind, ist diese Zeitspalte redundant, weil man dann einfach den Startzeitstempel nehmen könnte und da die Ererignisdauern als laufende Summe draufaddieren könnte. Könnte man auch verwenden um das gegen die Zeit-Spalte gegenzuprüfen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten