【问题标题】:How to delete all columns in DataFrame except certain ones?如何删除 DataFrame 中除某些列之外的所有列?
【发布时间】:2018-02-01 10:12:52
【问题描述】:

假设我有一个如下所示的 DataFrame:

a  b  c  d  e  f  g  
1  2  3  4  5  6  7
4  3  7  1  6  9  4
8  9  0  2  4  2  1

除了ab 之外,我将如何删除每一列?

这将导致:

a  b
1  2
4  3
8  9

我想要一种方法来删除这些使用简单的代码行,删除除ab 之外的所有列,因为假设我有 1000 列数据。

谢谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    In [48]: df.drop(df.columns.difference(['a','b']), 1, inplace=True)
    Out[48]:
       a  b
    0  1  2
    1  4  3
    2  8  9
    

    或:

    In [55]: df = df.loc[:, df.columns.intersection(['a','b'])]
    
    In [56]: df
    Out[56]:
       a  b
    0  1  2
    1  4  3
    2  8  9
    

    PS 请注意the most idiomatic Pandas way to do that was already proposed by @Wen:

    df = df[['a','b']]
    

    df = df.loc[:, ['a','b']]
    

    【讨论】:

    • 当您使用 inplace 时,性能或其他方面是否有任何差异,更一般的问题是 df.drop(...inplace=True) vs df = df[...] any建议
    • @PirateApp,可能会有一些细微差别。我建议你阅读this answer from one of the main Pandas developers Jeff and comments under that answer...
    • @MaxU 我认为df.loc 在处理数百万条记录方面比dropfilter 等任何其他方法都要快得多。如果我错了,请纠正我。
    【解决方案2】:

    添加到组合中的另一个选项。为了便于阅读,我更喜欢这种方法。

    df = df.filter(['a', 'b'])
    

    第一个位置参数是items=[]


    奖金

    您还可以使用like 参数或regex 进行过滤。
    如果您有一组像['a_1','a_2','b_1','b_2']这样的列,这很有帮助

    你可以的

    df = df.filter(like='b_')
    

    最后是['b_1','b_2']

    Pandas documentation for filter.

    【讨论】:

      【解决方案3】:

      有多种解决方案。

      df = df[['a','b']] #1
      
      df = df[list('ab')] #2
      
      df = df.loc[:,df.columns.isin(['a','b'])] #3
      
      df = pd.DataFrame(data=df.eval('a,b').T,columns=['a','b']) #4 PS:I do not recommend this method , but still a way to achieve this 
      

      【讨论】:

      • df = df[['a','b']] 如果您希望在子集上工作。
      【解决方案4】:

      如果您只想保留比要删除的列更多的列,请在 .isin 语句之前放置一个“~”以选择除您想要的列之外的每一列:

      df = df.loc[:, ~df.columns.isin(['a','b'])]
      

      【讨论】:

      • 这是唯一的答案。 “删除列除外”。谢谢,我正在找这个。
      【解决方案5】:

      如果您要删除的列超过两列,比如2030,您也可以使用列表。确保您还指定了轴值。

      drop_list = ["a","b"]
      df = df.drop(df.columns.difference(drop_list), axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-25
        • 2016-03-07
        • 1970-01-01
        • 2020-12-01
        • 2015-10-18
        • 1970-01-01
        相关资源
        最近更新 更多