Seite 1 von 1

read_csv ersetzt Dezimaltrennzeichen nicht

Verfasst: Donnerstag 11. Juli 2019, 19:15
von py-noob
Hallo, ich möchte eine csv Datei in ein pandas dataframe laden und habe ein Problem, dass das Dezimaltrennzeichen nicht richtig erkannt wird.
Hier ist der Code und die Beispieldaten (kann man eigentlich keine Dateien hochladen?)
import pandas as pd

dateipfad = 'bsp.csv'

daten = pd.read_csv(dateipfad,
sep=';',
usecols = [0, 1, 2, 3],
decimal=',',
header=None)
2019-06-11;27,15;27,82;27,49;
2019-06-07;28,06;27,88;28,16;
2019-06-06;27,74;27,78;27,33;
2019-06-05;27,82;27,21;27,66;
2019-06-04;27,65;27,57;27,56;
2019-06-03;27,55;27,99;27,50;
2019-05-31;27,01;27,53;27,76;
2019-05-30;27,84;27,71;27,49;
2019-05-29;27,69; ;27,53;
2019-05-28;27,83;28,11;28,04;






Es scheint so, dass Zeilen in denen die Daten unvollständig sind nicht funktionieren. Allerdings habe ich einen anderen Datensatz, bei dem, soweit ich das gesehen habe, alle Daten vorhanden sind und es trotzdem als String behandelt wird.

Beste Grüße

Re: read_csv ersetzt Dezimaltrennzeichen nicht

Verfasst: Donnerstag 11. Juli 2019, 20:13
von Sirius3
Spalten können nur umgewandelt werden, wenn alle Elemente vom selben Typ sind.
Was soll den mit leeren Zellen passieren?

Re: read_csv ersetzt Dezimaltrennzeichen nicht

Verfasst: Donnerstag 11. Juli 2019, 20:37
von py-noob
Gilt das auch für die erste Zeile, dass alle Elemente einer Spalte vom selben Typ sein müssen?
Was in die leeren Zellen kommt ist im Grunde egal, die müssen nur identifizierbar sein, damit auf die nächste Zelle mit einem Wert ausgewichen werden kann. Ich denke, es ist am einfachsten diese Zellen einfach mit einem Nan zu versehen.

Re: read_csv ersetzt Dezimaltrennzeichen nicht

Verfasst: Donnerstag 11. Juli 2019, 21:07
von ThomasL
mach mal

Code: Alles auswählen

df = pd.read_csv(dateipfad, sep=';', usecols = [0,1,2,3], decimal=b',', na_values=' ', header=None)
wichtig ist das na_values

Re: read_csv ersetzt Dezimaltrennzeichen nicht

Verfasst: Donnerstag 11. Juli 2019, 21:50
von py-noob
Danke für deine Antwort mit dem Parameter na_values funktioniert es auch, aber leider war das bisher nur eine Minimalversion von den Übungsdaten. Mit den eigentlichen Übungsdaten funktioniert es aber noch nicht. Hier hab ich die Daten mal hochgeladen
https://www.file-upload.net/download-13 ... s.csv.html
import pandas as pd

dateipfad = 'google_aktienkurs.csv'

daten = pd.read_csv(dateipfad,
sep=';',
decimal=b',',
na_values=' ',
thousands=','
)
Edit: hat sich erledigt, hatte bei thousands ein Komma statt Punkt eingetragen :?
Was hat eigentlich das b bei decimal=b',' für eine Bedeutung? Es funktioniert auch ohne