Course
Python String zu DateTime: Wie man Strings in Python in DateTime-Objekte umwandelt
Willst du zum Kern kommen und die Datetime-Codierung verstehen?
Datums- und Zeitangaben sind ein wesentlicher Bestandteil vieler Softwareanwendungen, und ihr effektiver Umgang mit ihnen ist eine wichtige Fähigkeit für Entwickler. In Python sind Strings ein gängiger Datentyp, um Daten und Zeiten darzustellen. Als Datenwissenschaftler und Ingenieure müssen wir diese Strings jedoch oft in Datetime-Objekte konvertieren, um verschiedene Operationen wie Sortieren oder Vergleichen durchzuführen.
Die Umwandlung von Strings in Datetime-Objekte kann knifflig sein, vor allem für diejenigen, die neu in Python sind. In diesem Artikel gehen wir die Schritte durch, die erforderlich sind, um diese Methoden zu verwenden, und geben dazu Codebeispiele. Egal, ob du ein erfahrener Entwickler bist oder gerade erst anfängst, lass uns in die Welt der Datetime-Objekte in Python eintauchen!
Um den Beispielcode in diesem Lernprogramm ganz einfach selbst auszuführen, kannst du eine kostenlose DataLab-Arbeitsmappe erstellen, auf der Python vorinstalliert ist und die alle Codebeispiele enthält. Wenn du mehr darüber erfahren möchtest, wie du Strings in Datetime-Objekte umwandelst, schau dir diese praktische DataCamp-Übung an.
Python von Grund auf lernen
Eine sanfte Einführung in das Python datetime Modul
Das datetime-Modul, das in Python integriert ist, kann immer dann verwendet werden, wenn du mit Datumsangaben, Uhrzeiten oder Zeitintervallen in einer mit Python erstellten Anwendung arbeiten musst. Sie bietet praktische Klassen und Methoden zur Darstellung und Bearbeitung von Datums- und Zeitdaten.
Wir wollen die wichtigsten Klassen dieses Moduls verstehen , da wir sie in datetime-Objekte umwandeln werden:
1. datetime.date
Diese Klasse stellt ein Datum (Jahr, Monat und Tag) dar und bietet Methoden für die Arbeit mit Datumsangaben, wie z. B. die Berechnung der Differenz zwischen zwei Datumsangaben und die Formatierung von Datumsangaben als Zeichenketten.
Angenommen, wir haben einen Datensatz mit den täglichen Aktienkursen eines Unternehmens. Wir können die Datumsklasse verwenden, um die Daten aus dem Datensatz zu extrahieren und die Aktienkurse im Zeitverlauf darzustellen.
Hier ist ein Schnipsel, der die Verwendung der Datumsklasse zeigt:
from datetime import date
# create a date object representing March 1, 2023
start_date = date(2023, 3, 1)
# extract information such as the year, month, and day
year = start_date.year
month = start_date.month
day = start_date.day
# get the day of the week (Note: Monday is coded as 0, and Sunday as 6)
weekday = start_date.weekday()
# the date can be formatted as a string if needed
date_str = start_date.strftime('%Y-%m-%d')
2. datetime.time
Diese Klasse stellt eine Tageszeit (Stunde, Minute, Sekunde und Mikrosekunde) dar und bietet Methoden für die Arbeit mit Zeiten, wie den Vergleich von Zeiten und die Formatierung von Zeiten als Strings.
Angenommen, wir haben einen Datensatz, der die Endzeit eines Rennens enthält. Wir können die Zeitklasse verwenden, um die Stunden und Minuten zu extrahieren, in denen jeder Teilnehmer das Rennen beendet.
from datetime import time
# create a time object with the microsecond granularity
end_time = time(15, 45, 30, 500000)
# get the hour and minute
hour = end_time.hour
minute = end_time.minute
second = end_time.second
microsecond = end_time.microsecond
3. datetime.datetime
Diese Klasse stellt ein Datum und eine Uhrzeit dar und bietet Methoden für die Arbeit mit beiden. Sie kombiniert die Funktionen der Datums- und Zeitklassen.
Sie wird häufig bei Datenanalysen eingesetzt, die Zeitreihendaten mit einer hohen zeitlichen Auflösung beinhalten, z. B. Daten auf Stunden- oder Minutenebene. Angenommen, wir haben einen Datensatz mit der stündlichen Stromnachfrage für eine Stadt. Wir können die datetime-Klasse verwenden, um das Datum und die Uhrzeit aus dem Datensatz zu extrahieren und den Strombedarf über die Zeit darzustellen.
from datetime import datetime
# create a datetime object representing March 1, 2023 at 9:30 AM
start_datetime = datetime(2023, 3, 1, 9, 30)
# get the year, month, day, hour, and minute
year = start_datetime.year
month = start_datetime.month
day = start_datetime.day
hour = start_datetime.hour
minute = start_datetime.minute
4. datetime.timedelta
Diese Klasse stellt eine Dauer oder ein Zeitintervall dar und bietet Methoden für die Arbeit mit Zeitintervallen, wie z. B. das Addieren oder Subtrahieren von Zeitintervallen von Daten oder Zeiten.
Angenommen, wir haben einen Datensatz mit den Start- und Endzeiten einer Reihe von Ereignissen und wollen die Gesamtdauer aller Ereignisse berechnen. Wir können die Klasse timedelta verwenden, um die Dauer jedes Ereignisses zu berechnen und sie zu summieren.
from datetime import timedelta
# create a timedelta object representing 3 hours and 15 minutes
event_duration = timedelta(hours=3, minutes=15)
# get the total duration in seconds
event_duration_seconds = event_duration.total_seconds()
# add the duration to a start time to get an end time
event_start_time = datetime(2023, 3, 1, 18, 15)
event_end_time = event_start_time + event_duration
In all diesen Fällen, die wir gezeigt haben, haben wir Datetime-Objekte verwendet, aber die realen Daten bleiben in der Praxis oft als String. Durch die Umwandlung in ein Datetime-Objekt werden alle oben genannten Funktionen freigeschaltet, die für datenwissenschaftliche Analysen und Anwendungen wichtig sind.
Steigere die Python-Kenntnisse deines Teams
Trainiere dein Team in Python mit DataCamp for Business. Umfassende Schulungen, praktische Projekte und detaillierte Leistungskennzahlen für dein Unternehmen.
Einen String in ein datetime-Objekt in Python mit datetime.strptime() umwandeln
In Python können wir die Methode datetime.strptime() verwenden, um einen String in ein Datetime-Objekt zu konvertieren. Die Methode strptime() benötigt zwei Argumente: die zu konvertierende Zeichenkette und eine Formatzeichenkette, die das Format der Eingabezeichenkette angibt.
Der Formatstring verwendet eine Kombination von Formatierungscodes, um die verschiedenen Komponenten von Datum und Uhrzeit darzustellen. Hier sind einige der am häufigsten verwendeten Formatierungscodes:
- %Y: 4-stelliges Jahr
- %y: 2-stelliges Jahr
- %m: Zweistelliger Monat (01-12)
- %d: Zweistelliger Tag des Monats (01-31)
- %H: Zweistellige Stunde (00-23)
- %M: Zweistellige Minute (00-59)
- %S: Zweistellige Sekunde (00-59)
Da wir nun die strptime-Direktiven verstehen, kann die Umwandlung von Strings in Datetime-Objekte vereinfacht werden.
- Schritt 01: Analysiere die Datums-/Zeitzeichenfolge, die umgewandelt werden kann, auf Muster, die den Formatierungscodes entsprechen.
- Schritt 02: Erstelle das Datums-Zeit-Format aus den strptime()-Direktiven.
- Schritt 03: Übergib die Zeichenkette und das Format an die Funktion und erhalte das Objekt als Ausgabe.
Lass uns diese Schritte in die Tat umsetzen.
Konvertieren eines Strings in einem bestimmten Format in ein Datetime-Objekt
from datetime import datetime
# Example with the standard date and time format
date_str = '2023-02-28 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'
date_obj = datetime.strptime(date_str, date_format)
print(date_obj)
# Example with a different format
date_str = '02/28/2023 02:30 PM'
date_format = '%m/%d/%Y %I:%M %p'
date_obj = datetime.strptime(date_str, date_format)
print(date_obj)
Im ersten Beispiel haben wir einen String, der ein Datum und eine Uhrzeit im Format "JJJJ-MM-TT HH:MM:SS" darstellt, und im zweiten Beispiel in einem anderen Format, "MM/TT/JJJJ HH:MM AM/PM".
In beiden Fällen müssen wir als zweites Argument von strptime() den richtigen Formatstring angeben, um das richtige Datetime-Objekt zu erhalten.
Konvertierung eines Strings mit Zeitzoneninformationen in ein datetime-Objekt
from datetime import datetime
date_str = '2023-02-28 14:30:00+05:30'
date_format = '%Y-%m-%d %H:%M:%S%z'
date_obj = datetime.strptime(date_str, date_format)
print(date_obj)
In diesem Beispiel haben wir eine Zeichenkette, die ein Datum und eine Uhrzeit mit Zeitzoneninformationen im Format "JJJJ-MM-TT HH:MM:SS+TZOFFSET" darstellt, wobei TZOFFSET der Zeitzonenversatz in Stunden und Minuten gegenüber UTC ist. Wir geben den Formatstring als zweites Argument für strptime() an, einschließlich des Formatierungscodes %z, um die Zeitzonenverschiebung zu analysieren.
Die Funktion, die wir oben gesehen haben, mag in der Theorie einfach erscheinen, aber sie kann auch eine Quelle der Frustration sein, wenn in der Praxis etwas schief läuft.
Fehlersuche bei häufigen strptime()-Fehlern
Hier sind einige häufige Fehler, auf die du stoßen kannst, und wie du sie beheben kannst:
ValueError: Zeitdaten 'date_string' entsprechen nicht dem Format '%Y-%m-%d %H:%M:%S'
Der häufigste Fehler tritt auf, wenn der Eingabestring nicht mit dem Formatstring übereinstimmt. Bitte überprüfe, ob die Eingabezeichenfolge und die Formatzeichenfolge genau übereinstimmen.
import datetime
# When input has two-digit year instead of four-digit year
date_str = '23-03-01'
date_obj = datetime.datetime.strptime(date_str, '%y-%m-%d')
# Raises ValueError: time data '23-03-01' does not match format '%y-%m-%d'
# When the input has missing leading zeros for hour and minute
time_str = '8:30'
time_obj = datetime.datetime.strptime(time_str, '%H:%M')
# Raises ValueError: time data '8:30' does not match format '%H:%M'
TypeError: strptime() Argument 1 muss str sein, nicht 'int'
Der nächste häufige Fehler tritt auf, wenn du datetime.strptime() oder time.strptime() eine ganze Zahl anstelle eines Strings übergibst. Stelle sicher, dass alle Werte, die du der Funktion übergibst, Strings sind.
# Example 1: Integer instead of string
date_int = 20230301
date_obj = datetime.datetime.strptime(date_int, '%Y%m%d')
# Raises TypeError: strptime() argument 1 must be str, not int
# Example 2: List instead of string
date_list = [2023, 3, 1]
date_obj = datetime.datetime.strptime(date_list, '%Y-%m-%d')
# Raises TypeError: strptime() argument 1 must be str, not list
ValueError: unkonvertierte Daten bleiben: ':00'
Dieser Fehler tritt auf, wenn in der Eingabezeichenfolge Restzeichen vorhanden sind, die von der Formatzeichenfolge nicht erfasst werden. Dieser Fehler tritt zum Beispiel auf, wenn der Formatstring nur das Jahr, den Monat und den Tag angibt, der Eingabe-String aber auch die Tageszeit enthält. Um diesen Fehler zu beheben, vergewissere dich, dass der Formatstring mit dem gesamten Eingabe-String übereinstimmt.
# when input string contains time of day
date_str = '2023-03-01 12:30:00'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: 12:30:00
# When input string contains extra characters
date_str = '2023-03-01T00:00:00Z'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: T00:00:00Z
Fazit
Die Methode datetime.strptime() bietet eine flexible und leistungsstarke Möglichkeit, Strings in Python in datetime-Objekte zu konvertieren und kann für eine Vielzahl von Datums- und Zeitformaten verwendet werden. Warum nimmst du dir nicht unser Cheatsheet für Termine und Zeiten zur Hand?
Nachdem du die Daten und Zeiten verstanden hast, ist der nächste Schritt, sie in einem Projekt zu üben. Wir empfehlen dir, eine davon auszuwählen und dein Wissen zu festigen:
Wir sind uns einig, dass Datums- und Zeitdaten in der realen Welt kompliziert sind, aber du musst nur die Formate und Muster verstehen, die hinter jeder Art von Datum und Uhrzeit in deinen Daten stehen, und die Bibliotheken, die du hast, klug einsetzen.
Lass dich für deine Traumrolle als Data Scientist zertifizieren
Unsere Zertifizierungsprogramme helfen dir, dich von anderen abzuheben und potenziellen Arbeitgebern zu beweisen, dass deine Fähigkeiten für den Job geeignet sind.
Erfahre mehr über Python
Course
Manipulating Time Series Data in Python
Course
Visualizing Time Series Data in Python
Der Blog