@cube.: Bei den Punken 2. und 3. ist die 24 wahrscheinlich nur ein Beispiel, denn was Du eigentlich machen musst ist alle Messwerte an einem Tag zusammen addieren und dann durch die Anzahl der Werte an einem Tag teilen. Wenn das grundsätzlich immer 24 wären, bräuchte man die Spalte mit den Zeitstempeln nicht wirklich.
Du musst das Problem in kleinere Teilprobleme aufteilen, bis die so einfach werden, dass man sie mit einer Funktion in ein paar Zeilen Code lösen kann. Und aus den ganzen Teillösungen kann man dann grössere Teillösungen und am Ende eine Gesamtlösung zusammensetzen.
Mal Vorschläge für Schritte mit Beispielen für diese Daten:
Code: Alles auswählen
1,2000-01-01T00:00:00Z
2,2000-01-01T01:00:00Z
3,2000-01-01T02:00:00Z
4,2000-01-01T03:00:00Z
5,2000-02-01T00:00:00Z
6,2000-02-01T01:00:00Z
7,2000-02-01T02:00:00Z
8,2000-02-01T03:00:00Z
1. Einlesen der Datei in eine verschachtelte Liste also eine Liste welche eine Liste pro Dateizeile mit den Spaltenwerten als Zeichenketten enthält. Das `csv`-Modul wurde ja schon erwähnt.
Code: Alles auswählen
[['1', '2000-01-01T00:00:00Z'],
['2', '2000-01-01T01:00:00Z'],
['3', '2000-01-01T02:00:00Z'],
['4', '2000-01-01T03:00:00Z'],
['5', '2000-02-01T00:00:00Z'],
['6', '2000-02-01T01:00:00Z'],
['7', '2000-02-01T02:00:00Z'],
['8', '2000-02-01T03:00:00Z']]
2. Umwandeln der Liste in eine die nicht mehr Zeichenketten als innerste Werte enthält, sondern Zahlen als erste Zeilenelemente und Datumsangaben als zweite Zeilenelemente. Für Datumsangaben gibt es das `datetime`-Modul mit einem `datetime`-Typ der sich hier geradezu anbietet.
Auch hier kann man das Problem nochmal ganz einfach zerlegen, denn um alle Elemente in einer Liste umzuwandeln, kann man eine Funktion schreiben die *ein* Element umwandelt, und dann diese Funktion auf alle Elemente anwenden. Die `map()`-Funktion kann dabei hilfreich sein.
Code: Alles auswählen
[[1.0, datetime.datetime(2000, 1, 1, 0, 0)],
[2.0, datetime.datetime(2000, 1, 1, 1, 0)],
[3.0, datetime.datetime(2000, 1, 1, 2, 0)],
[4.0, datetime.datetime(2000, 1, 1, 3, 0)],
[5.0, datetime.datetime(2000, 2, 1, 0, 0)],
[6.0, datetime.datetime(2000, 2, 1, 1, 0)],
[7.0, datetime.datetime(2000, 2, 1, 2, 0)],
[8.0, datetime.datetime(2000, 2, 1, 3, 0)]]
Da man die Zeit nicht benötigt, kann man sie eigentlich auch in diesem Schritt auch verwerfen und nur `datetime.date`-Objekte verwenden.
Code: Alles auswählen
[[1.0, datetime.date(2000, 1, 1)],
[2.0, datetime.date(2000, 1, 1)],
[3.0, datetime.date(2000, 1, 1)],
[4.0, datetime.date(2000, 1, 1)],
[5.0, datetime.date(2000, 2, 1)],
[6.0, datetime.date(2000, 2, 1)],
[7.0, datetime.date(2000, 2, 1)],
[8.0, datetime.date(2000, 2, 1)]]
3. Gruppieren der Werte nach Datum. Für jeweils ein Datum alle Werte in einer Liste sammeln. Dabei kann `itertools.groupby()` nützlich sein, wenn man das nicht selber nachprogrammieren will.
Code: Alles auswählen
[[datetime.date(2000, 1, 1), [1.0, 2.0, 3.0, 4.0]],
[datetime.date(2000, 2, 1), [5.0, 6.0, 7.0, 8.0]]]
4. Eine Funktion die den Durchschnitt von einer Liste mit Werten berechnet. Und die dann verwenden um, naja eben den Durchschnitt auszurechnen.
Code: Alles auswählen
[[datetime.date(2000, 1, 1), 2.5], [datetime.date(2000, 2, 1), 6.5]]