Tango
Tango

Reputation: 397

Pass column index and range simultaneously in Pandas iloc

Suppose I have a dataframe with 100 columns. I want to select only 0,1 and 51-100 columns for all rows. I am trying something like this as of now:

df.iloc[:,[0,1,range(51,101)]]

But it is throwing error:

"setting an array element with a sequence"

Though it is working if I am passing only range and not column indices.

Also I have tried:

df.iloc[:,[0,1,51:102)]]

It is showing invalid syntax.

Can somebody please point out mistake here. Also please suggest alternative way to achieve functionality.

Upvotes: 3

Views: 5444

Answers (2)

maciejwww
maciejwww

Reputation: 1196

You can do this without numpy.r_:

new_df = df.iloc[:, [0, 1] + list(range(51,101))]

Upvotes: 4

jezrael
jezrael

Reputation: 862511

I think you need numpy.r_ for concanecate indices:

df.iloc[:,np.r_[0,1,51:102]]

Sample:

df = pd.DataFrame([[0] * 10], columns=list('abcdefghij'))
print (df)
   a  b  c  d  e  f  g  h  i  j
0  0  0  0  0  0  0  0  0  0  0

print (df.iloc[:,np.r_[0,1,5:8]])
   a  b  f  g  h
0  0  0  0  0  0

Upvotes: 8

Related Questions