Python-Bite steht für kleine Beispiel Python-Codehappen, die ein Befehl oder die Anwendung einer Library verdeutlichen. Heute geht es darum, wie Ihr den Wochentag eines Datums herausfindet.
Dafür gehen wir in mehreren Schritten vor. Als ersten setzen wir die lokalen Einstellungen auf deutsch, ansonsten bekommen wir nämlich die englischen Wochentage. Das geht mit dem Befehl
locale.setlocale(locale.LC_ALL, 'deu_deu')
Dann sagen wir dem Benutzer, dass er sein Geburtstag eingeben soll. Die Eingabe ist natürlich erstmal ein String, den wir in den Datumstyp umwandeln wollen. Hier bietet es sich an, eine Überprüfung zu machen, ob die Eingabe im richtigen Format ist, der Einfachheit halber lasse ich es aber weg.
Im nächten Schritt wollen wir den eingebenen String in ein Datum umwandeln. Hierzu nutzen wir die Library datetime, denn mit dem folgenden Befehl können wir das erreichen.
datetime.datetime.strptime(birthdate,'%d.%m.%Y').date()
So, nun haben wir also ein Datum und der Typ date liefert auch schon die passende Funktion weekday mit, d.h. mit birthday.weekday() bekommen wir den Wochentag geliefert. Allerdings nur als Zahl, welche wir noch in den Wochentag-Namen umwandeln wollen. Dafür ist die Library “calendar” geeignet. denn diese enthält das Array day_name. Wir suchen also aus dem Array einfach das Element an der Stelle der Wochentagszahl raus. Und das geht so:
calendar.day_name[birthday.weekday()]
Hier also nochmal der ganze Code zum direkt ausprobieren.
# -*- coding: utf-8 -*- """ Wochentag des Geburtstags @author: Holger """ import datetime import calendar import locale locale.setlocale(locale.LC_ALL, 'deu_deu') print('Hallo, wie heißt Du?') name = input() print('Hallo '+name) print('Bitte nenne mir Dein Geburtstag (TT.MM.JJJJ):') birthdate = input() #in Datumformat konvertieren birthday = datetime.datetime.strptime(birthdate,'%d.%m.%Y').date() print('Du bist an einem '+calendar.day_name[birthday.weekday()]+' geboren.')
Und jetzt experimentiert ein bisschen selber herum. Kommentiert mal die Zeile mit locale aus, etc.
Happy Coding,
Euer Holger
Hallo!
Danke für den Artikel. Ich habe das umgekehrte Problem: Ich habe eine Zeitserie mit dem Format (Bsp.) “Sa., 01. Jan. 2022 01:30”
Wie kann ich dieses mit der Funktion in ein Datumsformat umwandeln. Mein Ansatz
datetime.datetime.strptime(df[1,0],’%w, d%. %m. %Y %H:%M’)
scheint nicht zu funktionieren.
Danke und schöne Grüße
Sven
PS: Ich habe ca. 30.000 Datensätze mit dem genannten timestamp – wie kann ich alle Daten gleichzeitig umwandeln? Muss ich dafür einen loop nutzen?
Hi Sven,
Du hast zwei Möglichkeiten, wobei ich den zweiten Weg bevorzugen würde, da der deutlich schneller ist.
1. Möglichkeit: mit den Python-Hausmitteln, d.h. mit der von Dir genannten Funktion datetime.datetime.strptime
Du schneidest zuerst den Wochentag ab (die Information steckt ja im Datum drin) und konvertierst dann:
import datetime
s = “Sa., 01. Jan. 2022 01:30″
print(datetime.datetime.strptime(s[5:],”%d. %b. %Y %H:%M”))
–> Um das für mehrere Datumsangaben zu machen, müsstest Du eine for-Schleife benutzen, was bei 30.000 Datensätzen wie gesagt nicht zu empfehlen ist. Und da Du df als Variable benutzt, nehme ich an, dass Du einen DataFrame hast, insofern ist pandas die bessere Wahl.
2. Möglichkeit: mittels pandas-Funktion to_datetime. Das Vorgehen ist das gleiche, auch zuerst die ersten 5 Zeichen abschneiden, dann konvertieren
import pandas as pd
df = pd.DataFrame({“datum_string”:[“Sa., 01. Jan. 2022 01:30″,”So., 02. Jan. 2022 13:30”]})
pd.to_datetime(df[“datum_string”].str[5:], format=”%d. %b. %Y %H:%M”)
Der Vollständigkeit halber:
Es gibt auch den Datumsformatcode %a, der den Wochentag erkennen sollte. Hier kommt man aber schnell in Schwierigkeiten, denn das hängt von der lokalen Einstellung des Rechners ab (auch das kann aber wieder mittels des Moduls locale gelöst werden). Kurz gesagt, würde ich mir die Mühe sparen und die obige Lösung 2 verwenden.
Viele Grüße und happy coding,
Holger