read_csv ersetzt Dezimaltrennzeichen nicht

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
py-noob
User
Beiträge: 6
Registriert: Donnerstag 11. Juli 2019, 18:55

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
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Spalten können nur umgewandelt werden, wenn alle Elemente vom selben Typ sind.
Was soll den mit leeren Zellen passieren?
py-noob
User
Beiträge: 6
Registriert: Donnerstag 11. Juli 2019, 18:55

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.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
py-noob
User
Beiträge: 6
Registriert: Donnerstag 11. Juli 2019, 18:55

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
Antworten