Quiero extraer los datos para la primera columna. Quiero que la salida solo tenga [male, farmer] y el resto se ignore. ¿Qué tengo que hacer?

import numpy as np
from scipy import stats

data = np.array([[11, "male",1222,"teacher"],[23,"female",333,"student"],[15,"male",542,"security"],[44,"male",4422,"farmer"],[25,"female",553,"farmer"]])

# type of the data above
types = ["num","cat","num","cat"]
idx = []
for index, _type in enumerate(types):
    if _type == 'cat':
        idx.append(index)

mode = []
for i in idx:
    mode.append(stats.mode(data[:,i]))
print("mode: {}".format(mode))

Si el código [sub[0] for sub in mode] está incluido en el código, la salida sigue siendo desordenada aunque solo tenga la primera columna (la salida se muestra a continuación).

mode: [array(['male'], dtype='<U11'), array(['farmer'], dtype='<U11')]

0
Elvis 8 oct. 2019 a las 12:30

3 respuestas

La mejor respuesta

Actualizar

Tratar:

[element[0][0] for element in mode]

En general, [x para x en iterable_structure] le permitirá acceder a cada elemento de la lista, procesarlo y crear una nueva lista. Echa un vistazo a:

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

1
Joanna 8 oct. 2019 a las 10:02

¿Eso ayuda?

In [1]: l=[[1,2,3],[4,5,6],[7,8,9]]
In [2]: [sub[0] for sub in l]
Out[2]: [1, 4, 7]
2
Yosef Arbiv 8 oct. 2019 a las 09:36
>>> import numpy as np
>>> x = np.array([[1,2,3,4],[5,6,7,8]])

>>> x
array([[1, 2, 3, 4],
    [5, 6, 7, 8]])

>>> x[:,0] # for returning the first column using '0'
array([1, 5])

Creo que esto podría ayudarte

1
Avishek Datta Ray 8 oct. 2019 a las 09:38
58283664