unconverted data remains when parsing with format

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
franze_m
User
Beiträge: 11
Registriert: Donnerstag 9. März 2023, 20:27

Hallo,
ich erkenne den Fehler.
Ich habe eine CSV-Datei eingelesen und es sieht OK aus. Nun möchtte ich das Datumsformat spezifizieren, damit ich einen Linechart ausgeben kann. Hierbei erhalte ich den Fehler "ValueError: unconverted data remains when parsing with format "%Y-%m-%d %H:%M": " ", at position 0. You might want to try:" Das angezeigte Format %M": " " habe ich gar nicht spezifiziert.

Code:
#!/bin/python3
#
#
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import datetime
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv("/tmp/huehnerstall.csv",header=0, sep=';',usecols= ['DateTime','Total'])
df.info()
df.head(3)
df.DateTime=pd.to_datetime(df['DateTime'], format='%Y-%m-%d %H:%M')
# Draw a line chart
pd.options.display.max_rows = 7 # one week
df.plot(title="Ertrag Huehnerstall",kind='line', x='DateTime', y='Total');

plt.show()

exit(0)


DataFrame:
['DateTime', 'Total'] [0 2023-01-14 23:26 429,255 ] [1 2023-01-14 23:27 429,255 ] [2 2023-01-14 23:35 429,255 ] [3 2023-01-14 23:40 429,255 ] [4 2023-01-14 23:45 429,255 ] [5 2023-01-14 23:50 429,255 ] [6 2023-01-14 23:55 usw.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Du hast dieses Format nicht angegeben? Und was ist das da:

Code: Alles auswählen

df.DateTime=pd.to_datetime(df['DateTime'], format='%Y-%m-%d %H:%M')
Zusätzlich: Ich weiß nicht, woher du die Idee mit dem `exit(0)` hast, aber das ist falsch. Um die Dokumentation zu `exit` und `quit` zu zitieren: "They are useful for the interactive interpreter shell and should not be used in programs."
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@franze_m: Das parsen des Zeitstempels würde man eher schon beim einlesen erledigen lassen. Und bei der zweiten Spalte fehlt offenbar noch die Angabe des Zeichens das den Dezimalbruch trennt, oder den Tausender-Trenner. Je nach dem ob der erste Wert 429255 oder 429.255 sein sollte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
franze_m
User
Beiträge: 11
Registriert: Donnerstag 9. März 2023, 20:27

Sorry vielleicht habe ich Tomaten auf den Augen, aber ich kann im Input kein fehlendes Komma bei 429,255 sehen.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@franze_m: Es geht nicht um ein *fehlendes* Komma, sondern um das Komma das *da* ist. Du hast da keine Zahlen im Dataframe sondern Zeichenketten, also die *Zeichenkette* "429,255" statt der *Zahl* 429.255 oder 429255 — je nachdem was das Komma in der Zeichenkette bedeuten soll. Versuch mal die Summe der "Total"-Spalte zu berechnen, dann siehst Du was ich meine.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
franze_m
User
Beiträge: 11
Registriert: Donnerstag 9. März 2023, 20:27

Hallo Blackjack,
das hat überhaupt nichts mit dem Fehler zu tun. Der Fehler tritt nicht bei einer Berechung auf sonder bei der Datumskonvertierung. Ich habe das Komma in der Dezimalzahl in Punkt geandert ohne das sich der Fehler verändert hat. Im übrigen hängt es vom Zeichensatz ab ob . oder , in der Dezimalzahl das richtige ist. Nochmals der Fehler ist wie folgt:
Traceback (most recent call last):
File "strptime.pyx", line 359, in pandas._libs.tslibs.strptime.array_strptime VVVV hier ist der Fehler
ValueError: unconverted data remains when parsing with format "%Y-%m-%d %H:%M": " ", at position 0. You might want to try:
- passing `format` if your strings have a consistent format;
- passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;
- passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.
python-BaseException
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@franze_m: Das hat nichts mit dem Fehler zu tun ist aber halt auch ein Fehler, der dann spätestens beim `plot()`-Aufruf entweder fehlschlägt, oder ein komisches Ergebnis zur Folge haben wird. Und es hängt nicht vom Zeichensatz ab ob "." oder "," der Dezimaltrenner ist. Ein "." ist in jedem Zeichensatz ein "." und ein "," ist in jedem Zeichensatz ein ",". (Sofern sie diese Zeichen überhaupt enthalten. Aber so exotisch ist es ja nicht.) In Python ist etwas mit einem "," jedenfalls keine Zahl, sondern hier in eine Zeichenkette.

Der Fehler ist doch ziemlich deutlich. Da ist etwas in mindestens einem Zeitstempeltext das hinter dem Muster noch übrig bleibt: " ". Lösungsmöglichkeiten werden auch gleich vorgeschlagen, deren Bedeutung/Auswirkung man in der Dokumentation nachlesen kann. Eine davon würde ich versuchen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten