Probleme beim Einlesen von CSV file mit Numpy

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
pganster
User
Beiträge: 4
Registriert: Montag 13. August 2018, 16:32

Hallo Ihr,

ich möchte Daten aus Excel in Python importieren, um damit zu rechnen. Ich habe das Excel file bereits in ein CSV file umgewandelt.

Hier mein Code:

Code: Alles auswählen

# Import necessary packages
import numpy as np 

#Extract Data from Excel in Python Array
total_customer_data = np.array(np.genfromtxt('ML_Project_1_Linear_Regression_CostumerData.csv',  delimiter = ";", dtype=float))
print (total_customer_data)

#Calculating means from Customer Satisfaction and Loyalty
cs_data = np.array(total_customer_data[:,1])
print (cs_data)

cl_data = np.array(total_customer_data[:,2])
print (cl_data)

cs_mean = np.mean(cs_data)
cl_mean = np.mean(cl_data)

print (cs_mean)
print (cl_mean)
Ich habe schon vieles versucht (dtype auf "None" setzen, mit Panda die Daten einspeisen, was funktioniert aber dann Probleme bei der Berechnung des Means bereitet)

Nun weiß ich echt nicht mehr weiter.

Der Code liefert folgenden Output:

Code: Alles auswählen

[Running] python -u "/Users/anwender/Desktop/Machine Learning Projects/Bivariate_linear_Regression/Project_1_CustomerLoyaltyPrediction/Project_1_ML_Code.py"
[[nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]
 [nan nan nan]]
[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
 nan nan]
[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
 nan nan]
nan
nan

[Done] exited with code=0 in 0.719 seconds
Danke für Eure Hilfe im Voraus und viele Grüße!
LG
Philipp
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Nun, Numpy kann deine csv Datei nicht einlesen, wie sehen denn die ersten 5 Zeilen deiner csv Datei aus?
Normalerweise ist eine CSV Datei eine Comma-Separated-Values Datei, dein Delimiter ist aber ein Semikolon ";" warum?

Versuch doch mal die Bibliothek Pandas, da kannst du direkt Excel Dateien einlesen.
https://pandas.pydata.org/pandas-docs/s ... excel.html

Code: Alles auswählen

import pandas as pd
df = pd.read_excel('filename')
print(df.head())
und hiermit kannst du dann aus dem Dataframe ein Numpy-Array erzeugen
https://pandas.pydata.org/pandas-docs/s ... alues.html

Code: Alles auswählen

total_customer_data = df.values
Pandas bietet dir Möglichkeiten, deine Daten zu reinigen
https://pandas.pydata.org/pandas-docs/s ... _data.html
und kann auch mit df.mean() das machen, was du möchtest.

Imho eine Bibliothek die der angehende Data Scientist kennen sollte.
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
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@pganster: mit Pandas kann man auch direkt Excel-Dateien lesen. Bei csv hat man immer das Problem, das das Format nicht eindeutig ist. Bei Dir ist das Problem, dass Excel Zahlen mit Komma schreibt und nicht mit Punkt. Wo hast Du denn mit Pandas Probleme?

@ThomasL: der Delimiter ist ein »;« weil das der Standard von Excel ist, zumindest der deutschen Version.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Sirius3 hat geschrieben: Samstag 20. Oktober 2018, 10:12 @ThomasL: der Delimiter ist ein »;« weil das der Standard von Excel ist, zumindest der deutschen Version.
Stimmt, habe ich in der Sekunde nicht auf dem Schirm gehabt.
Ist übrigens nicht nur in der deutschen Version so, sondern in allen Ländern in denen das Komma als Dezimaltrenner benutzt wird.
Ich vermute jetzt auch wie Du das dies die Ursache für die Numpy Einleseprobleme sein wird.
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
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde bei pd.read_csv() den Parameter decimal=',' setzen, sofern die deutsche Version in Excel genutzt wird.
incoggnito
User
Beiträge: 53
Registriert: Donnerstag 27. April 2017, 09:28

Bei mir sieht ein pandas csv import in der Regel irgendwie so aus:

Code: Alles auswählen

df = pd.read_csv(filepath, sep=';', header=6,engine='c', encoding='latin-1', thousands='.',decimal=',', usecols=[])
Bei mir funzt decimal ohne thousands meistens nicht... vielleicht hilft dir das weiter!

Wenn es sich um viele CSV Files handelt empfehle ich dir einen Blick auf Dask
Antworten