Ich denke, dass ich die Frage schon mal ansatzweise gestellt habe. Ich habe jetzt ein Modul neu geschrieben, dass ein Dataset auf der Festplatte schreibt und dort damit arbeiten kann. Das Modul besteht ausschließlich aus Funktionen.
Jedes Dataset verfügt über eine Spalte mit Datumsangaben, die ich aktuell als String lade. Ich überlege die Datumsstrings in ein datatime.date-Objekt zu verwandeln und dann so vorzuhalten. Die Werte je Datum speichere ich in einem Wörterbuch mit dem Datum (dann datetime.date-Objekt) als Schlüssel. Spricht aus eurer Sicht etwas gegen die Umwandlung der Datumswerte in ein datetime.date-Objekt!?
Ich beabsichtige die Umwandlung, ich will mich nur noch mal rückversichern, weil ich später das Modul massig einsetzen muss. Eine spätere Änderung wäre dann übel...
Dataset mit Datum
@pixewakb
Was soll man dazu sagen, außer: Das kommt darauf an? Wenn Du das Wörterbuch z. B. nach Datumswerten sortiert ausgeben möchtest, dann bietet sich `datetime` sicherlich an. Die nächste Frage für mich wäre dann allerdings, ob ein Wörterbuch grundsätzlich der passende Datentyp ist. Wenn Du lediglich auf die Werte des Wörterbuchs zugreifst, sehe ich keinen Mehrwert in einer Umwandlung.
Aber wie gesagt: Ohne zu wissen, was Du Dir von einer Umwandlung versprichst, lässt sich Deine Frage nicht beantworten.
Was soll man dazu sagen, außer: Das kommt darauf an? Wenn Du das Wörterbuch z. B. nach Datumswerten sortiert ausgeben möchtest, dann bietet sich `datetime` sicherlich an. Die nächste Frage für mich wäre dann allerdings, ob ein Wörterbuch grundsätzlich der passende Datentyp ist. Wenn Du lediglich auf die Werte des Wörterbuchs zugreifst, sehe ich keinen Mehrwert in einer Umwandlung.
Aber wie gesagt: Ohne zu wissen, was Du Dir von einer Umwandlung versprichst, lässt sich Deine Frage nicht beantworten.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Ehrlich gesagt hatte ich vermutet, dass es eine state of the art-Lösung gibt. Bei Bedarf kann ich m. E. auch die date-Strings in datetime.date-Objekte umwandeln und umgekehrt, also ist es da relativ egal, wie mir scheint. Sagen wir mal es sieht wie folgt aus:
2016-05-02;5
2016-05-03;8
2016-05-04;8
2016-05-05;0
2016-05-06;8
2016-05-09;5
2016-05-10;8
2016-05-11;8
2016-05-12;0
2016-05-13;8
Konkret lade ich die Datumswerte separat in eine Liste und habe dazu ein Wörterbuch. Konkret: Ich hole mir die keys zum Wörterbuch, wandle sie in eine Liste um, sortiere die Liste (so wie ich es gerade brauche) und stelle dann mit den Werten je Datum Berechnungen an. In der Datumsliste habe ich Lücken (Feiertage, Urlaub usw.), so dass ich nicht einfach einen Tag hinzufügen kann, sondern tatsächlich über die Datumswerte iterieren musss. (Mit Datumsstrings habe ich es bereits implementiert.)
Sagen wir mal, ihr hättet obige Daten und müsstet einen Datentyp wählen. Interessant sind die Werte je Datum, nicht das Datum selbst, was nur als Schlüssel (Zugriffsmöglichkeit auf die Daten) fungiert. Wir würdet ihr das machen und wie - im Grundsatz - implementieren?
2016-05-02;5
2016-05-03;8
2016-05-04;8
2016-05-05;0
2016-05-06;8
2016-05-09;5
2016-05-10;8
2016-05-11;8
2016-05-12;0
2016-05-13;8
Konkret lade ich die Datumswerte separat in eine Liste und habe dazu ein Wörterbuch. Konkret: Ich hole mir die keys zum Wörterbuch, wandle sie in eine Liste um, sortiere die Liste (so wie ich es gerade brauche) und stelle dann mit den Werten je Datum Berechnungen an. In der Datumsliste habe ich Lücken (Feiertage, Urlaub usw.), so dass ich nicht einfach einen Tag hinzufügen kann, sondern tatsächlich über die Datumswerte iterieren musss. (Mit Datumsstrings habe ich es bereits implementiert.)
Sagen wir mal, ihr hättet obige Daten und müsstet einen Datentyp wählen. Interessant sind die Werte je Datum, nicht das Datum selbst, was nur als Schlüssel (Zugriffsmöglichkeit auf die Daten) fungiert. Wir würdet ihr das machen und wie - im Grundsatz - implementieren?
@pixewakb: Also wenn irgendwo ein `datetime`-Objekt gebraucht wird, dann würde ich die gleich beim Einlesen in solche umwandeln. Nur wenn ganz sicher ist, dass man immer nur die Zeichenkettendarstellung benötigt, würde ich es als Zeichenketten belassen. Wahrscheinlich nicht einmal dann. Bei Bedarf in `datetime` umwandeln *und umgekehrt* klingt gar nicht gut. Daten sollte man so früh wie möglich in das Format wandeln mit dem gearbeitet wird und nicht bei Bedarf im Programm immer hin und her wandeln. Das wird unübersichtlich und fehleranfällig.
Kommt Pandas eventuell in Frage? Statt sich das selbst zu programmieren?
Edit: Wobei ich den Sinn des Wörterbuchs hier nicht verstehe‽ Warum reicht keine Liste mit Datum und Werten, zum Beispiel als Liste oder Tupel, als Elemente? Sortiert sind die Datumsangaben ja schon. Falls nicht, kann man das ja auch mit einer Liste mit Listen/Tupeln ganz einfach tun.
Kommt Pandas eventuell in Frage? Statt sich das selbst zu programmieren?
Edit: Wobei ich den Sinn des Wörterbuchs hier nicht verstehe‽ Warum reicht keine Liste mit Datum und Werten, zum Beispiel als Liste oder Tupel, als Elemente? Sortiert sind die Datumsangaben ja schon. Falls nicht, kann man das ja auch mit einer Liste mit Listen/Tupeln ganz einfach tun.
Bisher ist in dem Thread noch gar nicht die Rede davon gewesen, ob und wie oft einzelne Datensätze anhand des Datums herausgefischt werden sollen. Das scheint mir doch wesentlich für die Frage, ob eine Liste es genau so tut wie ein Dictionary oder vielleicht sogar besser.BlackJack hat geschrieben:Edit: Wobei ich den Sinn des Wörterbuchs hier nicht verstehe‽ Warum reicht keine Liste mit Datum und Werten, zum Beispiel als Liste oder Tupel, als Elemente? Sortiert sind die Datumsangaben ja schon. Falls nicht, kann man das ja auch mit einer Liste mit Listen/Tupeln ganz einfach tun.
Ich muss relativ häufig Werte nach Datum vergleichen. Bislang kam ich mit einem Datumsstring immer gut zurecht, meine ich. Ich denke gerade nach. Ich kann nicht abschätzen, ob ich später in Probleme hereinlaufe, wenn ich Weg 1 oder Weg 2 wähle. Ich schaue gerade ins Modul, mit dem ich Daten lade und verarbeite.
Pandas nutze ich unter der Haube schon etwas. Im Moment komme ich ohne pandas noch gut zurecht, sehe aber noch nicht, wie ich einzelne Aufgaben, die ich aktuell sehr gut bearbeiten kann, dann mit pandas lösen könnte. Das schreckt mich noch von pandas ab - ich merke an, dass ich seit 2014 (?) sehr viel, sehr umfassend modernisiert habe.
Ich überlege noch und gucke noch in den Quelltext.
Pandas nutze ich unter der Haube schon etwas. Im Moment komme ich ohne pandas noch gut zurecht, sehe aber noch nicht, wie ich einzelne Aufgaben, die ich aktuell sehr gut bearbeiten kann, dann mit pandas lösen könnte. Das schreckt mich noch von pandas ab - ich merke an, dass ich seit 2014 (?) sehr viel, sehr umfassend modernisiert habe.
Ich überlege noch und gucke noch in den Quelltext.
Mit datetime.date kannst Du natürlich mehr machen: nicht nur sehen, dass Datum A vor Datum B liegt, sondern die Differenz ausrechnen, alle Einträge finden, die höchstens eine Woche vor oder nach Datum A liegen, usw. usf. Und die Daten in anderer Form ausgeben.pixewakb hat geschrieben:Ich muss relativ häufig Werte nach Datum vergleichen. Bislang kam ich mit einem Datumsstring immer gut zurecht, meine ich. Ich denke gerade nach. Ich kann nicht abschätzen, ob ich später in Probleme hereinlaufe, wenn ich Weg 1 oder Weg 2 wähle. Ich schaue gerade ins Modul, mit dem ich Daten lade und verarbeite.
Ich bin blöd, aber manchmal fällt dann auch bei mir mal der Groschen
Ich habe ein Modul, was sauber arbeitet und hatte bis gerade geglaubt, dass ich es umformen, d. h. wegwerfen und neu schreiben müsste, was mich wohl um Wochen zurückgeworfen hätte.
Ich werde das jetzt anders lösen und neben der load-Funktion, die das Dataset im Projekt bereitstellt eine Funktion load2 schreiben, die die Datumswerte als datetime.date-Objekte zurückgibt. Aktuell kann ich noch nicht abschätzen, dass ich das tatsächlich breit brauche, falls ich es brauche, kann ich wahlweise darauf zugreifen.
Bitte bei mir immer berücksichtigen, dass ich kein Programmierer oder Informatiker bin. Ich nutze Python inzwischen zur Arbeit an Datensätzen und zur automatischen Auswertung selbiger, ich möchte es möglichst gut machen, weil ich sonst später feststelle, dass die einfache Lösung mir Bei-Probleme beschert, vereinzelt stelle ich aber immer wieder fest, dass mir die Grundlagen fehlen, um Sachverhalte korrekt einschätzen zu können, was dann möglicherweise zu absonderlichen Ansichten führt. Das ist meinerseits keine böse Absicht!
Ich habe ein Modul, was sauber arbeitet und hatte bis gerade geglaubt, dass ich es umformen, d. h. wegwerfen und neu schreiben müsste, was mich wohl um Wochen zurückgeworfen hätte.
Ich werde das jetzt anders lösen und neben der load-Funktion, die das Dataset im Projekt bereitstellt eine Funktion load2 schreiben, die die Datumswerte als datetime.date-Objekte zurückgibt. Aktuell kann ich noch nicht abschätzen, dass ich das tatsächlich breit brauche, falls ich es brauche, kann ich wahlweise darauf zugreifen.
Bitte bei mir immer berücksichtigen, dass ich kein Programmierer oder Informatiker bin. Ich nutze Python inzwischen zur Arbeit an Datensätzen und zur automatischen Auswertung selbiger, ich möchte es möglichst gut machen, weil ich sonst später feststelle, dass die einfache Lösung mir Bei-Probleme beschert, vereinzelt stelle ich aber immer wieder fest, dass mir die Grundlagen fehlen, um Sachverhalte korrekt einschätzen zu können, was dann möglicherweise zu absonderlichen Ansichten führt. Das ist meinerseits keine böse Absicht!
@pixewakb
Ich hab' den Eindruck, dass Du Dir zu viele Gedanken über Probleme machst, die momentan noch überhaupt nicht existieren. Wenn Dein Modul das macht, für das Du es geschrieben hast, dann ist das doch ok. Wenn Du Daten im Stringformat vergleichst und zu einem richtigen Ergebnis kommst, warum denkst Du dann über ein anderes Format nach?
Und heute bereits eine "Funktion load2" zu schreiben, die Du eventuell einmal brauchen könntest, halte ich gelinde gesagt für Zeitverschwendung.
Aber vielleicht willst Du ja auch mal Deinen Code hier zeigen und beschreiben, was Du für Refactoringfantasien hast…?
Ich hab' den Eindruck, dass Du Dir zu viele Gedanken über Probleme machst, die momentan noch überhaupt nicht existieren. Wenn Dein Modul das macht, für das Du es geschrieben hast, dann ist das doch ok. Wenn Du Daten im Stringformat vergleichst und zu einem richtigen Ergebnis kommst, warum denkst Du dann über ein anderes Format nach?
Und heute bereits eine "Funktion load2" zu schreiben, die Du eventuell einmal brauchen könntest, halte ich gelinde gesagt für Zeitverschwendung.
Aber vielleicht willst Du ja auch mal Deinen Code hier zeigen und beschreiben, was Du für Refactoringfantasien hast…?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
- Natrix natrix
- User
- Beiträge: 16
- Registriert: Mittwoch 29. März 2017, 09:16
Hallo Froum.
Thema passt hier einigermaßen, daher habe ich keinen neuen Faden eröffnet.
Ich habe ein PandasDF, dass einige Rohstoffpreise auflistet. Im Ursprung sind die Datumsangaben als String. Ich brauche das Datum aktuell nicht wirklich sondern nutze es v.a um die verschiedenen Spalten über join zusammenzuziehen.
Die Tabelle wird sauber aufgebaut.
Ich möchte einige Grafiken machen und das String-Object konnte ich nicht als Achsen-Beschriftung ziehen... es sind ja tausende Werte.
Also habe ich in datetime umgwandelt...
und hier geht etwas schief bei der Umwandlung... Monate und Tage werden vertauscht
Nachträgliches Sortieren macht es noch mal deutlicher
führt zu
--> Ich habe divsere Parameter ausprobiert, bekomme aber nicht raus, was ich bei der datetime Umwandlung falsch mache.
Please help
VG
NN
Thema passt hier einigermaßen, daher habe ich keinen neuen Faden eröffnet.
Ich habe ein PandasDF, dass einige Rohstoffpreise auflistet. Im Ursprung sind die Datumsangaben als String. Ich brauche das Datum aktuell nicht wirklich sondern nutze es v.a um die verschiedenen Spalten über join zusammenzuziehen.
Code: Alles auswählen
df1 = pd.read_table("d:\\data\\Blei.csv", decimal=b',' , sep= ";", index_col=0)
df2 = pd.read_table("d:\\data\\Zinn.csv", decimal=b',' , sep= ";", index_col=0)
df3 = pd.read_table("d:\\data\\Kupfer.csv", decimal=b',' , sep= ";", index_col=0)
all = df1.join(df2)
all = all.join(df3)
all.tail(8)
Code: Alles auswählen
Blei Zinn Kupfer
Datum
06.12.2004 976.15 8739.40 3092.0
02.12.2004 968.11 8761.46 3217.0
01.12.2004 1000.25 8812.29 3246.5
30.11.2004 981.36 8730.13 3262.0
10.03.2004 869.75 NaN 2867.0
03.02.2004 813.50 NaN 2547.5
08.01.2004 752.50 NaN 2337.0
20.11.2003 602.50 NaN 1996.0
Also habe ich in datetime umgwandelt...
Code: Alles auswählen
all2 = all.copy()
all2.index = pd.to_datetime(pd.Series(all2.index))
Code: Alles auswählen
Blei Zinn Kupfer
Datum
2004-06-12 976.15 8739.40 3092.0
2004-02-12 968.11 8761.46 3217.0
2004-01-12 1000.25 8812.29 3246.5
2004-11-30 981.36 8730.13 3262.0
2004-10-03 869.75 NaN 2867.0
2004-03-02 813.50 NaN 2547.5
2004-08-01 752.50 NaN 2337.0
2003-11-20 602.50 NaN 1996.0
Code: Alles auswählen
all2.sort_index(axis=1, inplace = True, ascending=False)
all2.tail(8)
Code: Alles auswählen
Blei Zinn Kupfer
Datum
2004-08-12 949.76 8718.30 2991.5
2004-08-01 752.50 NaN 2337.0
2004-07-12 965.26 8683.11 3137.0
2004-06-12 976.15 8739.40 3092.0
2004-03-02 813.50 NaN 2547.5
2004-02-12 968.11 8761.46 3217.0
2004-01-12 1000.25 8812.29 3246.5
2003-11-20 602.50 NaN 1996.0
Please help
VG
NN
@Natrix natrix: Meiner Meinung nach passt das Thema hier gar nicht. Hier geht es darum, ob Daten im Programm als Strings oder als `datetime`-Objekte gespeichert werden sollen und nicht um das Parsen der Daten.
Hast du dir die Dokumentation von `pd.to_datetime` angeguckt? Wenn ja, was sagt die zu dem Thema, dass zuerst der Tag angegeben ist?
Wenn du die Daten eh parsen willst, dann kannst du auch beim `pd.read_table`-Aufruf `parse_dates=["Datum"]` angeben. Eventuell mit dem passenden Argument, das dafür sorgt, dass die Tage und Monate in der richtigen Reihenfolge geparst werden.
Hast du dir die Dokumentation von `pd.to_datetime` angeguckt? Wenn ja, was sagt die zu dem Thema, dass zuerst der Tag angegeben ist?
Wenn du die Daten eh parsen willst, dann kannst du auch beim `pd.read_table`-Aufruf `parse_dates=["Datum"]` angeben. Eventuell mit dem passenden Argument, das dafür sorgt, dass die Tage und Monate in der richtigen Reihenfolge geparst werden.
- Natrix natrix
- User
- Beiträge: 16
- Registriert: Mittwoch 29. März 2017, 09:16
Danke. Kleine Ursache, große Wirkung.
Habe es bisher z.B. erfolglos mit dem format Paramter versucht.
Jetzt klappt es, Danke!
Habe es bisher z.B. erfolglos mit dem format Paramter versucht.
Jetzt klappt es, Danke!