【问题标题】:How to select columns of a data frame not in a list of names in Python如何选择不在Python名称列表中的数据框列
【发布时间】:2019-11-19 11:43:35
【问题描述】:

我想通过保留所有不以某个字符串开头的列来对数据框的列索引进行子集化。现在我可以过滤以某个字符串开头的列的列索引,但我想做相反的事情并排除符合某个条件的列名。

如果试图保留列

如果尝试保留以 FR 开头的列名,我使用此代码,它有效。

factor_list = df2.filter(like = 'FR_', axis=1).columns

为了排除以“FR”开头的列,我尝试了很多方法,包括以下内容:

factor_list = df2.filter(like != 'FR_', axis=1).columns
factor_list = ~df2.filter(like = 'FR_', axis=1).columns

【问题讨论】:

标签: python regex pandas dataframe


【解决方案1】:

你可以的

factor_list = df2.filter(regex = '^(?!FR_).*', axis=1).columns

【讨论】:

  • 这是可行的,因为我可以直接将代码添加到我的程序中。
【解决方案2】:

这应该适合你。请查看以上链接了解更多详情。

factor_list = df2.loc[:,~df.columns.str.startswith('FR')]

【讨论】:

    【解决方案3】:

    您与df.filter 关系密切。在这种情况下,通过使用FR_ 过滤所有不以 (?!^) 开头的列,使用正则表达式会更容易:

    df.filter(regex='^(?!FR_)')
    
       Col1  Col3
    0     2     8
    1     0     7
    2     4     1
    3     2     6
    4     4     8
    
    # Example dataframe
    df = pd.DataFrame({'Col1':np.random.randint(0,10,5),
                       'FR_Col2':np.random.randint(0,10,5),
                       'Col3':np.random.randint(0,10,5),
                       'FR_Col4':np.random.randint(0,10,5)})
    
       Col1  FR_Col2  Col3  FR_Col4
    0     2        1     8        5
    1     0        7     7        9
    2     4        8     1        9
    3     2        2     6        9
    4     4        9     8        3
    

    【讨论】:

    • 感谢您提供额外的上下文和解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2017-09-15
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多