2017-05-02 6 views
0

ich, dass die Varianz jeder Spalte in einer CSV-Datei erhalten möchten habe ich schrieb folgendes:die Varianz bekommen numpy mit

import numpy as np 
import csv 
import collections 
Training  = 'Training.csv' 
inputFile  = open(Training,'r',newline='') 
cols_values  = collections.defaultdict(list) 
numericalValues = [] 
reader = csv.reader(inputFile) 
row = next(reader) 

for row in reader: 
    for col, value in enumerate(row): 
     cols_values[col].append(value) 
     numericalValues.append(cols_values[col]) 

np.var(numericalValues[0], dtype=np.float64) 

Ich erhalte eine Fehlermeldung in np.var line:

TypeError: cannot perform reduce with flexible type 

keine Ahnung was mir fehlt, die Werte sind definitiv Ziffern!

+0

sind alle diese doppelte Präzision? –

+0

nein, aber auch ohne Typdefinition bekomme ich den gleichen Fehler – Engine

+0

Natürlich, weil Sie sagen, dass Sie verschiedene Datentypen haben. Egal, was Sie angeben (oder nicht), Sie müssen den gleichen Datentyp für alle Werte haben. Konvertieren Sie daher das Array in einen einzelnen Datentyp, bevor Sie die Varianz berechnen. –

Antwort

1

Gibt es einen Grund, keine Pandas dafür zu verwenden?

import numpy as np 
import pandas as pd 
Training = 'Training.csv' 
df = pd.read_csv(Training) 
df.apply(np.var, axis=0)  # can also use `df.var(...)` 

Sie wollen sicherstellen, dass alle Ihre Spalten numerische Werte haben. Sie können auch np.nanvar verwenden, um NaN Werte zu ignorieren, wenn Sie wählen.

+0

danke für die antwort es hat funktioniert jetzt habe ich muss verstehen warum! – Engine