Seite 1 von 1
Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Mittwoch 19. August 2020, 04:38
von JoMü89
Hallo in die Runde
ich bin blutiger Anfänger und versuche mich in die Datenanalyse mittels Python/Pandas einzuarbeiten und bin über jede Hilfe dankbar

Mein Code soll dazu dienen die Differenz zwischen einem Startdatum Bsp.: 01.01.2019 05:47 und einem Enddatum Bsp.: 01.01.2019 06:00 in Minuten in einer Spalte eines DataFrames auszugeben. Mit dem unten angezeigten Code unter 1. kriege ich dies auch hin, jedoch in einem series timedelta format (wenn ich mich nicht irre

).
1.
>>
df["Exe Time"] = pd.to_datetime(df["Exe Time"])
##print(df_ExeTime)
df["CtrctStartTime"] = pd.to_datetime(df["Ctrct"].str.slice(0, 14, 1))
##print(df_CtrctTime)
df["LeadTime"] = df["CtrctStartTime"] - df["Exe Time"]
>>
Mit der Erweiterung (fett markiert) in Code 2., habe ich nun versucht dieses series timedelta format in Minuten umzuwandeln.
Jedoch ohne Erfolg
2.
>>
df["Exe Time"] = pd.to_datetime(df["Exe Time"])
##print(df_ExeTime)
df["CtrctStartTime"] = pd.to_datetime(df["Ctrct"].str.slice(0, 14, 1))
##print(df_CtrctTime)
df["LeadTime"] = df["CtrctStartTime"] - df["Exe Time"]
df["LeadTime"] = divmod(df["LeadTime"].seconds, 60)
>>
Kann mir jemand von Euch netterweise helfen?
Vielen Dank Vorab!
Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Mittwoch 19. August 2020, 08:25
von einfachTobi
Das pandas-Timedelta Objekt hat eine Methode
total_seconds(). Ich vermute, dass du die suchst.
Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Mittwoch 19. August 2020, 08:31
von sparrow
@JoMü89: Meine Erfahrung mit Pandas hält sich in Grenzen, aber: Mir kommt es sehr seltsam vor, dass du in der sten Zeile direkt eine Spalte konvertierst. Ich bin mir ziemlich sicher, dass das bereits beim Einlesen passieren sollte.
Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Mittwoch 19. August 2020, 09:08
von einfachTobi
Mir sind da noch ein paar kleine Ergänzungen aufgefallen:
- die prints werden auch ohne Kommentar nicht funktionieren
- verwende keine unnötigen Abkürzungen: Bspw. execution_time, contract_start (?)
- wie sparrow sagte, geschieht die Umformung etwas merkwürdig (auch unter Zuhilfenahme von str.slice) und spät. Vermutlich lässt sich das gleich beim Import korrigieren.
Wenn du uns einen Beispieldatensatz gibst und den Code, der davor läuft, können wir das bestimmt noch ein wenig verschönern

Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Donnerstag 20. August 2020, 11:21
von JoMü89
Würde euch gerne den Code und ein Bild zur Verfügung stellen, allerdings Scheiter ich gerade noch an dem Editor :-/
Wenn ich Bild einfügen betätige dann kommt nur
![Bild]()
...
Und wie kann ich euch denn den Code aus dem Jupiter Notebook heraus kopieren, sodass der nicht so beschissen wie bei meinem ersten Posting dargestellt wird.
Ist mir sehr unangenehm, dass ich bereits daran Scheiter....
Danke vorab

Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Donnerstag 20. August 2020, 11:41
von Jankie
Bilder musst du auf einem Image Hoster hochladen wie z.B. imgur, dann poste den Link hier.
Für Code darzustellen gibt es im vollständigen Editor den </> Button. Der Code muss dann zwischen die Codetags.
Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Donnerstag 20. August 2020, 11:59
von JoMü89
Dank der Hinweise von euch, fange ich noch mal von Vorne an, da die Infos von mir ein wenig knapp waren.
Ich habe eine CSV-Datei die ich einlese mit einigen Spalten und aus dieser möchte ich nur ausgewählte Spalten und nur Stundenkontrakte aus der Spalte Ctrct übernehmen. Dies funktioniert auch so weit. Aus der Spalte Ctrct ziehe ich nun den Startzeitpunkt des Kontrakts um die Zeitdifferenz zwischen diesem und der Ausführungszeit (Exe Time) zu berechnen und dies in eine neue Spalte zu schreiben die LeadTime heißt. Auch das habe ich soweit hinbekommen. Jedoch ist das Format der Zeitdifferenz nicht Minuten sondern timedelta. Um nun eine Korrelation zwischen den Spalten Price und TimeLead zu bilden, benötige ich die Zeitdifferenz jedoch in Minuten...und hier Scheiter ich...
Anbei habe ich dies ein mal in einem Bild dargestellt:
Mein Code sieht wie folgt aus:
Code: Alles auswählen
df = pd.read_csv("/Users/johannesmueller/Python/Import Export/2019-01-01-Own_Trade.csv", delimiter = ";",
usecols = lambda column : column not in ["UsrCode" ,"UsrName","Area","TmZn","State","Accnt","P/O",
"Phase","TradeID","OrdrID","Text","StlmntState","StlmntInfo"],
skip_blank_lines = True, encoding = "iso-8859-1")
Code: Alles auswählen
df = df[~df.Ctrct.str.contains('15')]
df = df[~df.Ctrct.str.contains('30')]
df = df[~df.Ctrct.str.contains('45')]
df = df.sort_values(by = ['B/S','Ctrct'])
Code: Alles auswählen
df["Exe Time"] = pd.to_datetime(df["Exe Time"])
print(df_ExeTime)
df["CtrctStartTime"] = pd.to_datetime(df["Ctrct"].str.slice(0, 14, 1))
print(df_CtrctTime)
df["LeadTime"] = df["CtrctStartTime"] - df["Exe Time"]
df["Costs_Revenues"] = df["Prc"] * df['Qty']
df.to_csv("/Users/johannesmueller/Python/Import Export/test.csv", sep=';')
Hoffe dass ihr nachvollziehen könnt, wo mein Problem liegt...

Re: Einsteiger benötigt Hilfe bei timedelta series to minute
Verfasst: Mittwoch 26. August 2020, 22:34
von JoMü89
Habe die Lösung für das Problem herausgefunden und den Code wie folgt angepasst:
Code: Alles auswählen
df1["Exe Time"] = pd.to_datetime(df1["Exe Time"])
# need to improve
df1["CtrctStartTime"] = pd.to_datetime(df1["Ctrct"].str.slice(0, 14, 1))
df1["LeadTime"] = (df1["CtrctStartTime"] - df1["Exe Time"]).astype("timedelta64[m]")