【问题标题】:Filtering out certain columns in a pandas dataframe过滤掉熊猫数据框中的某些列
【发布时间】:2016-08-02 14:01:34
【问题描述】:

我正在尝试根据列名过滤掉我的 pandas 数据框中的某些列。

所以框架大致是:

import pandas as pd

dict_build = {'Var_1_Reading': [1,2,3,10,0.1], 'Var_1_Confidence':[1,1,1,1,1], 'Var_2_Reading': [1,2,3,10,0.1], 'Var_2_Confidence':[1,1,1,1,1]}
df = pd.DataFrame(dict_build)

我想删除最后带有Confidence 的列。我尝试使用filter,但无法解决。目前我正在做:

ColList_to_drop = df.filter(regex='Confidence', axis=1).columns.values
filtered_df = df.drop(ColList_to_drop, axis = 1)

我可以在正则表达式中完成这两个步骤吗?

【问题讨论】:

    标签: python regex pandas


    【解决方案1】:

    应该这样做:

    >>> cols = [col for col in df.columns if not col.endswith('Confidence')]    
    >>> df = df[cols]
    
    >>> df
       Var_1_Reading  Var_2_Reading
    0            1.0            1.0
    1            2.0            2.0
    2            3.0            3.0
    3           10.0           10.0
    4            0.1            0.1
    

    【讨论】:

      【解决方案2】:

      你可以使用negative lookahead assertion(?!...):

      print df.filter(regex='^(?!.*Confidence).*$')
         Var_1_Reading  Var_2_Reading
      0            1.0            1.0
      1            2.0            2.0
      2            3.0            3.0
      3           10.0           10.0
      4            0.1            0.1
      

      【讨论】:

        【解决方案3】:

        你可以直接在列索引上使用str方法,如:

        df.loc[:, ~df.columns.str.endswith('Confidence')]
        

        【讨论】:

        • 我刚刚意识到您想删除列而不是选择它们。所以我在列过滤器上添加了一个否定。
        猜你喜欢
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-15
        • 2014-12-02
        • 2021-12-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多