Cómo seleccionar columnas de marcos de datos con listas y rangos combinados

Por favor considere esto df:

df = pd.DataFrame({'a':[1,2], 'b':[1,2], 'c':[1,2], 'd':[1,2], 'e':[1,2], 'f':[1,2], 'g':[1,2], 'h':[1,2]}) abcdefgh 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 

¿Cómo puedo seleccionar las columnas 1ª, 4ª y 5ª a 7ª? Lo que intenté:

 df.iloc[:, [0, 3, np.arange(5,8)]] ValueError: setting an array element with a sequence. 

Puedes hacerlo:

 df.iloc[:, [0, 3] + list(range(5,8))] 

[0, 3] + list(range(5,8)) concatena 2 listas, combinando tu lista explícita con una lista derivada de tu rango deseado.

Alternativamente, puede usar numpy.r para construir una matriz de indexación para usted:

 import numpy as np df.iloc[:, np.r_[0,3,5:8]] np.r_[0,3,5:8] # array([0, 3, 5, 6, 7]) 

Esto sería útil, por ejemplo, si tiene múltiples rangos.