Hallo zusammen, ich habe das Problem das ich eine txt-Datei mit Daten (dd.mm.jjjj) und Zeiten (hh:mm:ss) habe. Diese würde ich gerne z.B. in ein array übernehmen damit ich damit später rechnen und sie in einen Graphen eintragen kann. Damit das ganze einfacher wird habe ich vor die Zeiten in Sekunden um zu rechnen. Dafür habe ich auch schon etwas funktionierendes hinbekommen. Mein Ziel ist es die Zeiten im array mit einer while-Schleife Schritt für Schritt durchzuarbeiten und in ein neues array die Sekunden einzutragen.
Wahrscheinlich ist es sinnvoll hier mit Datetime zu arbeiten, damit kenne ich mich nur leider gar nicht aus. Es wäre super wenn mir jemand erklären könnte wie ich die Zeiten und Daten in ein array bekomme ohne den Fehler: could not convert string to float: b'18:36:56'
Dankeschön,
Anna
Zeiten und Daten aus txt-Datei importieren
Soweit verstehe ich die Dokumentation eigentlich. Nur leider wird dort keine Möglichkeit aufgelistet wie man die Daten aus der txt raus bekommt. Ich arbeite normaler weise nur mit Python um Graphen zu erstellen und verlasse mich dabei auf genfromtxt und arbeite mit den daraus entstehenden arrays. So würde ich es hier gerne auch machen. Damit ich die Werte nacheinander abarbeiten kann. Die Umwandlung in Sekunden und alles später mit datetime ist mir klar.
Kommst Du damit weiter? Du brauchst die datetime.strptime-Funktion und dann den String und einen Format-String (der passt) nutzen.
https://www.tutorialspoint.com/python/time_strptime.htm
Du kannst dann z. B. ein datetime.date- oder datetime.datetime-Objekt draus machen, also z. B. d1 = datetime.date(2018,9,1) usw.
https://www.tutorialspoint.com/python/time_strptime.htm
Du kannst dann z. B. ein datetime.date- oder datetime.datetime-Objekt draus machen, also z. B. d1 = datetime.date(2018,9,1) usw.
genfromtext ist hier wahrscheinlich das Problem. Man KANN das dazu bringen, die einzelnen Spalten spezifisch zu konvertieren. Aber das ist ein bisschen mühselig. Benuzt doch einfach Pandas. Da gibt es schon fertige bequeme Funktionen für sowas.
Siehe zb hier viewtopic.php?t=43509&start=15
und natürlich die Antwort von BJ danach beachten.
Siehe zb hier viewtopic.php?t=43509&start=15
und natürlich die Antwort von BJ danach beachten.
Ich hab mich jetzt an euren beiden Ideen versucht und das geschrieben:
data = pd.read_csv('Batterie.txt', sep="\t ")
print(data)
data.columns = ["a", "b"]
struct_time = time.strptime(a, "%H:%M:%S")
print(a)
Er hat allerdings schon Probleme beim benennen der spalten da er die txt so einließt:
02:32:39\t03:02:39
er scheint das \t beim trennen nicht zu nehmen.
Füge ich noch andere Sache ein wie parse_dates meckert er immer: Falling back to the 'python' engine
data = pd.read_csv('Batterie.txt', sep="\t ")
print(data)
data.columns = ["a", "b"]
struct_time = time.strptime(a, "%H:%M:%S")
print(a)
Er hat allerdings schon Probleme beim benennen der spalten da er die txt so einließt:
02:32:39\t03:02:39
er scheint das \t beim trennen nicht zu nehmen.
Füge ich noch andere Sache ein wie parse_dates meckert er immer: Falling back to the 'python' engine
- __blackjack__
- User
- Beiträge: 14033
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Temporal: Wenn Du '\t ', also Tabulator *gefolgt* von einem Leerzeichen als Trenner angibst, dann wird in der Tat nicht an einem Tabulator *ohne* folgendes Leerzeichen getrennt. Schau mal in die Dokumentation wie ein `sep`-Argument interpretiert wird das länger als ein Zeichen ist. Das erklärt dann auch die Warnung das die Python-Engine verwendet wird. Die wird man los wenn man sie über das passende Argument bewusst auswählt. Sofern Du wirklich mehr als ein Zeichen bei `sep` angeben möchtest.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mit den Zeiten kann ich jetzt so arbeiten wie ich es mir Vorgestellt habe. Nur die Daten machen mir noch Probleme. Ich möchte das Format der Daten gerne ändern. Das habe ich bisher getan:
Der Fehler ist immer: strptime() argument 1 must be str, not Series
auch wenn ich es so mache:
Code: Alles auswählen
data = pd.read_csv('Batterie.txt', sep="\t", header=None)
data.columns = ['a','b','c','d','e']
datetimeobject = pd.to_datetime(data['a'])
date = datetime.strptime(datetimeobject, '%Y-%m-%d')
newformat = date.strftime('%m%d%Y')
auch wenn ich es so mache:
Code: Alles auswählen
data['a']= data['a'].astype(str)
date = datetime.strptime(data['a'], '%Y-%m-%d')
newformat = date.strftime('%m%d%Y')/code]
- __blackjack__
- User
- Beiträge: 14033
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Temporal: Was und vor allem warum willst Du da machen? In der Spalte im Dataframe sollten Zeitstempel stehen, damit man damit arbeiten kann. Die müssen in der Regel auch als Zeitstempel an den Plot übergeben werden. Wie sie dort *angezeigt* werden, regelt man beim Plot.
Ich würde die Daten auch direkt beim einlesen in Zeitstempel umwandeln.
Zudem ist die Fehlermeldung ja auch ziemlich deutlich: `datetime.strptime()` möchte einen Zeichenkette mit einem Datum. Du versuchst da aber ein `Series`-Objekt mit ganz vielen Werten zu übergeben. Das kann offensichtlich nicht funktionieren.
Was ist eigentlich der Grund warum Du die vorhandene Kopfzeile so nichtsagend umbenennst in 'a', 'b', …?
Edit: Und würde es eventuell Sinn machen die Zeitstempel als Index zu verwenden statt als normale Spalte?
Ich würde die Daten auch direkt beim einlesen in Zeitstempel umwandeln.
Zudem ist die Fehlermeldung ja auch ziemlich deutlich: `datetime.strptime()` möchte einen Zeichenkette mit einem Datum. Du versuchst da aber ein `Series`-Objekt mit ganz vielen Werten zu übergeben. Das kann offensichtlich nicht funktionieren.
Was ist eigentlich der Grund warum Du die vorhandene Kopfzeile so nichtsagend umbenennst in 'a', 'b', …?
Edit: Und würde es eventuell Sinn machen die Zeitstempel als Index zu verwenden statt als normale Spalte?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.