Estoy tratando de agregar nombres de columnas a nudos ndarray, luego selecciono columnas por sus nombres. Pero no funciona. No puedo decir si el problema ocurre cuando agrego los nombres, o más tarde cuando intento llamarlos.Agregue nombres de columnas mediante programación a numpy ndarray
Aquí está mi código.
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]))
diagnósticos basados en dimensión coincide con lo que espero:
print len(csv_names)
>> 108
print data.shape
>> (1652, 108)
"data.dtype.names de impresión" también devuelve la salida esperada.
Pero cuando comienzo a llamar columnas por sus nombres de campo, ocurren cosas complicadas. La "columna" sigue siendo una matriz con 108 columnas ...
print data["EDUC"].shape
>> (1652, 108)
... y parece contener valores que faltan más que filas en el conjunto de datos.
print np.sum(np.isnan(data["EDUC"]))
>> 27976
¿Alguna idea de qué está mal aquí? Agregar encabezados debería ser una operación trivial, pero he estado luchando contra este error durante horas. ¡Ayuda!
Gracias - esto ayuda a aclarar las cosas conceptualmente. Pero todavía tengo algunas preguntas sobre este caso particular. Aquí, todas mis columnas son flotantes, y voy a hacer una gran cantidad de multiplicación de matrices, así que quiero mantener la estructura de 2d-array, sin necesidad de una matriz estructurada. Todo lo que quiero hacer es agregar nombres de campo. ¿Es eso posible? – Abe
NB: genfromtxt importa el csv en el formato de tupla estructurado de numpy. Intenté todo lo que pude pensar para importar nombres de campo en formato de matriz, y nada funcionó. – Abe
@Abe: aún puede realizar multiplicaciones de matrices: 'ver()' es simplemente otra forma de ver los * mismos * datos. Por lo tanto, puede trabajar tanto con la matriz de datos original como con la matriz 'view()' al mismo tiempo (la primera matriz es 2D, la segunda es 1D y está estructurada). – EOL