与使用.drop()相比,是否有更好的方法通过从数据帧中删除多个列来保留少数列?

2024-09-21 05:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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;有没有更好的方法让它们在传递了21个列名的情况下运行df1.drop()?在任何一个问题上,我都找不到更好的答案

编辑: 与中的解决方案不同 Selecting multiple columns in a pandas dataframe 因为要选择删除的列是随机的,而不是连续的


Tags: columns数据方法importnumpydataframesize数量
2条回答

您可以将要保留的所有行复制到新数据帧中,然后覆盖第一个数据帧,如下所示:

    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   u
0  65  95  13
1  58  42  75
2  95  34  12
3  43  20  79
4  83  27  47

相关问题 更多 >

    热门问题