在python中删除多列

时间:2021-06-22 02:03:11

标签: pandas dataframe

我的数据框中有 1000 列,我想删除第 3、5、7、9....999 列,但需要保留第 1 列。我不确定 df.drop 函数是否可以处理这个问题。有任何想法吗?以下代码删除所有奇数列,包括第一列。但我需要保留第一列

col_to_drop = df.columns[np.array([i for i in range(df.shape[1]) if i%2!= 1 and i != 1])]

df.drop(col_to_drop, axis=1)

3 个答案:

答案 0 :(得分:0)

试试这个:

df = pd.DataFrame(np.arange(100).reshape(10,-1), columns=[*'ABCDEFGHIJ'])
df.drop(df.columns[np.r_[2,4,5,6,9]], axis=1)
# or df.drop(df.columns[np.array([2,4,5,6,9])], axis=1)

输出:

   A   B   D   H   I
0   0   1   3   7   8
1  10  11  13  17  18
2  20  21  23  27  28
3  30  31  33  37  38
4  40  41  43  47  48
5  50  51  53  57  58
6  60  61  63  67  68
7  70  71  73  77  78
8  80  81  83  87  88
9  90  91  93  97  98

更新 1,000 列。

丢弃除 1 之外的所有奇数列。-> 3,5,7,9...999

col_to_drop = df.columns[np.array([i for i in range(df.shape[1]) if i%2 != 0 and i != 0])]

df.drop(col_to_drop, axis=1)

答案 1 :(得分:0)

我认为你可以尝试如下:

>>> df
    A   B   C   D   E
0  A1  B1  C1  D1  E1
1  A2  B2  C2  D2  E2
2  A3  B3  C3  D3  E3
3  A4  B4  C4  D4  E4
4  A5  B5  C5  D5  E5

删除不需要的列:

>>> df.drop(ex.columns[[0, 4, 2]], axis = 1, inplace = True)

结果:

>>> df
    B   D
0  B1  D1
1  B2  D2
2  B3  D3
3  B4  D4
4  B5  D5

另一种方式:

>>> df
     A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P
0   24  27  61  40  12  20  52  95  47  23  92  97  86  73  89  84
1   88  33  39  38  87   7  38  31  77   0  66  41  30  34  80   4
2    8  45  68  99  21  66   6  54  28  48  29  18  12  56  30   3
3   22  79  37   1  32   5  53  13   0  57  54  97  71  86  84  12
4   94  19   8  99  91  91  77  90  56  50  41   4  70  36  56  58
..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..
95  70  22  73  15  41  50  81  38  31  78  94  72  62  56  78  17
96  13  45  40  83  25  24  73  30  67  85  98  63  32   1  70  97
97  24  58  74  64   0  43  36  27  17  76  51  36  85  39  15  77
98  29   3  73  57  39  70  45  53  83  98  92  51  49  45  85  71
99  74  22  77  87   4  16  69  77  39  88  71  73  39   8  63  34

[100 rows x 16 columns]

由于您想删除所有奇数列,因此另一种方法是在使用 .loc 索引器时选择所有偶数列,如下所示。

>>> df.loc[:, ::2]
     A   C   E   G   I   K   M   O
0   24  61  12  52  47  92  86  89
1   88  39  87  38  77  66  30  80
2    8  68  21   6  28  29  12  30
3   22  37  32  53   0  54  71  84
4   94   8  91  77  56  41  70  56
..  ..  ..  ..  ..  ..  ..  ..  ..
95  70  73  41  81  31  94  62  78
96  13  40  25  73  67  98  32  70
97  24  74   0  36  17  51  85  15
98  29  73  39  45  83  92  49  85
99  74  77   4  69  39  71  39  63

[100 rows x 8 columns]

>>> df[df.columns[::2]]
     A   C   E   G   I   K   M   O
0   24  61  12  52  47  92  86  89
1   88  39  87  38  77  66  30  80
2    8  68  21   6  28  29  12  30
3   22  37  32  53   0  54  71  84
4   94   8  91  77  56  41  70  56
..  ..  ..  ..  ..  ..  ..  ..  ..
95  70  73  41  81  31  94  62  78
96  13  40  25  73  67  98  32  70
97  24  74   0  36  17  51  85  15
98  29  73  39  45  83  92  49  85
99  74  77   4  69  39  71  39  63

[100 rows x 8 columns]

答案 2 :(得分:0)

scott Boston 的答案的一点点变化非常适合这种情况

col_to_drop = df.columns[np.array([i for i in range(df.shape[1]) if i%2 != 1 and i != 0])]

df.drop(col_to_drop, axis=1)