特に、大量の列を持つデータを取り扱う際に、列名、列番号を範囲でいっぺんに指定したくなる気持ちになるでしょう。

範囲指定は
.loc
.iloc
メソッドの使い方がわかっていれば、理解は追いつくと思います。
※.locメソッドを用いた、日付範囲指定の列選択については、別の記事にて予定。


対象のデータフレーム:data1

In [8]: data1.head()
Out[8]:
   age  workclass  fnlwgt     education  educational-num      marital-status  \
0   25    Private  226802          11th                7       Never-married
1   38    Private   89814       HS-grad                9  Married-civ-spouse
2   28  Local-gov  336951    Assoc-acdm               12  Married-civ-spouse
3   44    Private  160323  Some-college               10  Married-civ-spouse
4   18          ?  103497  Some-college               10       Never-married

          occupation relationship   race  gender  capital-gain  capital-loss  \
0  Machine-op-inspct    Own-child  Black    Male             0             0
1    Farming-fishing      Husband  White    Male             0             0
2    Protective-serv      Husband  White    Male             0             0
3  Machine-op-inspct      Husband  Black    Male          7688             0
4                  ?    Own-child  White  Female             0             0

   hours-per-week native-country income
0              40  United-States  <=50K
1              50  United-States  <=50K
2              40  United-States   >50K
3              40  United-States   >50K
4              30  United-States  <=50K

「列名to列名」で範囲指定

例1

# 1列目のage列〜4列までのeducation列までを範囲選択
data1.loc[:, "age" : "education"]

例1の結果

       age         workclass  fnlwgt     education
0       25           Private  226802          11th
1       38           Private   89814       HS-grad
2       28         Local-gov  336951    Assoc-acdm
3       44           Private  160323  Some-college
4       18                 ?  103497  Some-college
5       34           Private  198693          10th
...

列番号で範囲指定

例2

# 1列目のage列〜4列までのeducation列までを範囲選択
data1.iloc[:, 0 : 4]

例2の結果

       age         workclass  fnlwgt     education
0       25           Private  226802          11th
1       38           Private   89814       HS-grad
2       28         Local-gov  336951    Assoc-acdm
3       44           Private  160323  Some-college
4       18                 ?  103497  Some-college
5       34           Private  198693          10th
...

※範囲指定時の注意(知らないとハマります)
上記の場合、「0≦(列番号指定範囲)<4」となり、列番号0,1,2,3番目の列(つまり1〜4列。)が選択されます。
以下、pandasのドキュメントより引用。

When slicing, the start bounds is included, while the upper bound is excluded.

複数の範囲で範囲指定

例えば、1列目〜3列目と6列目〜10列目、を選択したいシーンを想定します。
numpyモジュールを活用して、以下のようにします。

例3

# numpyモジュールをインポートし、npという名前にする
import numpy as np

# r_メソッドを利用して、複数の選択範囲でも列選択ができるようにする
data1.iloc[:, np.r_[0 : 3, 5 : 10]]

例3の結果

   age  workclass  fnlwgt      marital-status         occupation relationship  \
0   25    Private  226802       Never-married  Machine-op-inspct    Own-child
1   38    Private   89814  Married-civ-spouse    Farming-fishing      Husband
2   28  Local-gov  336951  Married-civ-spouse    Protective-serv      Husband
3   44    Private  160323  Married-civ-spouse  Machine-op-inspct      Husband
4   18          ?  103497       Never-married                  ?    Own-child
...
    race  gender
0  Black    Male
1  White    Male
2  White    Male
3  Black    Male
4  White  Female
...

※「np.r_」がないと動きません。

※内部ではどうなっているのか?
試しに、以下の動作を観察してみるとよいでしょう。(一部を切り取って実行しています)

例4

np.r_[0 : 3, 5 : 10]

例4の結果

array([0, 1, 2, 5, 6, 7, 8, 9])

範囲指定が展開され、選択したい列番号の一覧になって帰ってきます。
つまり、↓このコードは

data1.iloc[:, np.r_[0 : 3, 5 : 10]]

↓以下のコードに内部で変換され実行されていることが分かります。

data1.iloc[:, [0, 1, 2, 5, 6, 7, 8, 9]]

ビッグデータを取り扱う上で、不必要な列を残して分析を実施すると、処理時間が長くなるため効率的ではありません。
分析に入る前に、列選択の実施を極力行いたいところです。