3

Please consider this 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]})

   a  b  c  d  e  f  g  h
0  1  1  1  1  1  1  1  1
1  2  2  2  2  2  2  2  2

How can I select the 1st, 4th, and 5th-7th columns? What I tried:

df.iloc[:, [0, 3, np.arange(5,8)]]

ValueError: setting an array element with a sequence.
jpp
  • 159,742
  • 34
  • 281
  • 339
Saeed
  • 1,848
  • 1
  • 18
  • 26
  • 1
    You may also find [this post](https://stackoverflow.com/questions/10665889/how-to-take-column-slices-of-dataframe-in-pandas/10677896) useful. – pault Mar 18 '18 at 01:31

1 Answers1

4

You can do this:

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

[0, 3] + list(range(5,8)) concatenates 2 lists, combining your explicit list with a list derived from your desired range.

Alternatively, you can use numpy.r to build an indexing array for you:

import numpy as np

df.iloc[:, np.r_[0,3,5:8]]

np.r_[0,3,5:8]  # array([0, 3, 5, 6, 7])

This would be useful, for example, if you have multiple ranges.

jpp
  • 159,742
  • 34
  • 281
  • 339