Próbuję dodać nazwy kolumn do numpy ndarray, a następnie wybierz kolumny według ich nazw. Ale to nie działa. Nie mogę stwierdzić, czy problem występuje, gdy dodaję nazwy, czy później, gdy próbuję je wywoływać.Programowo dodawać nazwy kolumn do numpy ndarray
Oto mój kod.
data = np.genfromtxt(csv_file, delimiter=',', dtype=np.float, skip_header=1)
#Add headers
csv_names = [ s.strip('"') for s in file(csv_file,'r').readline().strip().split(',')]
data = data.astype(np.dtype([(n, 'float64') for n in csv_names]))
diagnostyka wymiarowe oparte dopasować czego oczekuję:
print len(csv_names)
>> 108
print data.shape
>> (1652, 108)
"data.dtype.names print" zwraca również oczekiwany wynik.
Ale kiedy zaczynam wywoływać kolumny według ich nazw pól, zdarzają się pomniejsze rzeczy. W „kolumna” jest wciąż tablicą z 108 kolumn ...
print data["EDUC"].shape
>> (1652, 108)
... i wydaje się zawierać więcej niż brakujące wartości są wiersze w zbiorze danych.
print np.sum(np.isnan(data["EDUC"]))
>> 27976
Masz pomysł, co tu jest nie tak? Dodawanie nagłówków powinno być trywialną operacją, ale od wielu godzin walczę z tym błędem. Wsparcie!
Dzięki - pomaga to konceptualnie. Ale wciąż mam kilka pytań na temat tej konkretnej sprawy. Tutaj wszystkie moje kolumny są zmiennoprzecinkowe i zamierzam wykonywać wiele mnożenia macierzy, więc chcę zachować strukturę tablic 2d - bez potrzeby stosowania tablicy strukturalnej. Wszystko, co chcę zrobić, to dodać nazwy pól. Czy to jest możliwe? – Abe
NB: genfromtxt importuje plik CSV w formacie krotki numpy. Próbowałem wszystkiego, co mogłem wymyślić, aby importować nazwy pól w formacie tablicy i nic nie działało. – Abe
@Abe: Nadal można wykonywać multiplikacje macierzy: 'view()' to po prostu inny sposób patrzenia na * same * dane. Tak więc możesz pracować zarówno z oryginalną tablicą danych, jak i tablicą 'view()' ed w tym samym czasie (pierwsza tablica to 2D, druga to 1D i ma strukturę). – EOL