猿问

有没有比使用 .drop() 更好的方法来通过从 DataFrame 中删除几列来保留几列?

想知道是否有更好的方法将所需的列保留在数据框中,如果我需要保留的列很少,而要删除的列是其中的几个


import numpy as np

df1 = pd.DataFrame(np.random.randint(10,99, size=(13, 26)), columns =list('abcdefghijklmnopqrstuvwxyz'))

df1

输出:



a   b   c   d   e   f   g   h   i   j   ... q   r   s   t   u   v   w   x   y   z

0   78  60  27  38  21  93  74  47  16  53  ... 79  56  40  41  87  80  14  82  12  50

1   84  73  59  46  91  43  22  28  57  52  ... 27  65  81  72  68  90  68  61  22  44

2   56  37  29  52  57  14  87  82  46  90  ... 67  57  29  14  55  30  46  72  56  91

3   86  44  46  79  41  74  32  49  42  32  ... 33  34  40  17  30  78  29  75  80  52

4   14  89  90  79  67  17  34  39  57  37  ... 93  49  78  91  26  73  40  48  91  36

5   16  62  32  87  56  81  82  17  59  57  ... 84  24  97  39  46  40  68  53  73  40

6   69  72  16  47  37  20  27  56  13  37  ... 10  28  17  35  39  14  51  85  69  53

7   81  34  35  20  66  44  86  23  94  57  ... 38  45  76  53  82  72  64  34  81  43

8   95  90  97  31  18  85  74  18  43  22  ... 20  20  96  25  53  76  55  96  58  98

9   73  53  72  94  55  33  22  40  11  64  ... 84  66  85  34  94  32  78  72  10  62

10  73  24  57  17  63  24  94  25  59  84  ... 34  45  27  28  47  23  38  80  45  41

11  69  18  22  42  95  38  16  47  68  36  ... 59  69  35  39  78  75  85  86  53  55

12  46  27  53  77  48  15  57  90  32  57  ... 32  79  18  67  71  86  54  11  36  51

13 rows × 26 columns

比如说,我只需要保留一些随机列,例如 e,u,r,q,j ;有没有更好的方法让它们必须在df1.drop()传入 21 个列名的情况下运行?我在任何问题中都找不到更好的方法。


编辑:与 在熊猫数据框中选择多个列中的解决方案不同, 因为要选择删除的列是随机的而不是顺序的


海绵宝宝撒
浏览 267回答 2
2回答

慕的地10843

您可以将要保留的所有行复制到一个新的数据框中,然后像这样覆盖您的第一个数据框:    import numpy as np    import pandas as pd            df1 = pd.DataFrame(np.random.randint(10,99, size=(13, 26)), columns =list('abcdefghijklmnopqrstuvwxyz'))    df2 = pd.DataFrame()    columns_to_keep = ["e", "r", "u"]    for column in columns_to_keep:        df2[column] = df1[column]    df1 = df2    df1或者使用 for 语句删除不在列表中的任何项目:    columns_to_keep = ["e", "r", "u"]    for column_name, column_data in df1.iteritems():      if column_name not in columns_to_keep:        df1 = df1.drop(column_name, axis=1)    df1

收到一只叮咚

让我们只使用列过滤并重新分配回 df1:df1 = pd.DataFrame(np.random.randint(10,99, size=(13, 26)), columns =list('abcdefghijklmnopqrstuvwxyz'))    columns_to_keep = ["e", "r", "u"]df1 = df1[columns_to_keep]df1.head()输出:    e   r   u0  65  95  131  58  42  752  95  34  123  43  20  794  83  27  47
随时随地看视频慕课网APP

相关分类

Python
我要回答