【问题标题】:How to subset a pandas dataframe如何对熊猫数据框进行子集化
【发布时间】:2016-11-18 12:32:45
【问题描述】:

我有一个有 50 列的 pandas 数据框,我想选择 30 列。 假设我们有以下数据框:

df = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",............, "z"]

我想选择“a”和“c”,然后选择从“h”到“z”的所有列

请告知如何按名称或索引对该数据框进行子集化。

我希望生成的数据框如下所示:

df = ["a", "c", "h", "i", "j", "k", "l",............, "z"]

【问题讨论】:

    标签: python pandas dataframe subset data-munging


    【解决方案1】:

    您可以使用numpy.r_ 连接列的位置,然后使用iloc 进行选择:

    print (df.iloc[:, np.r_[0,2,7: len(df.columns)]])
    

    示例:

    df = pd.DataFrame({'a':[1,2,3],
                       'b':[4,5,6],
                       'c':[7,8,9],
                       'd':[1,3,5],
                       'e':[5,3,6],
                       'f':[7,8,9],
                       'g':[1,3,5],
                       'h':[5,3,6],
                       'i':[7,8,9],
                       'j':[1,3,5],
                       'k':[5,3,6],
                       'l':[7,4,3],
                       'm':[7,4,3]})
    
    print (df)
       a  b  c  d  e  f  g  h  i  j  k  l  m
    0  1  4  7  1  5  7  1  5  7  1  5  7  7
    1  2  5  8  3  3  8  3  3  8  3  3  4  4
    2  3  6  9  5  6  9  5  6  9  5  6  3  3
    
    print (np.r_[0,2,7: len(df.columns)])
    [ 0  2  7  8  9 10 11 12]
    
    print (df.iloc[:, np.r_[0,2,7: len(df.columns)]])
       a  c  h  i  j  k  l  m
    0  1  7  5  7  1  5  7  7
    1  2  8  3  8  3  3  4  4
    2  3  9  6  9  5  6  3  3
    

    另一种解决方案是使用exclude listdifference

    exclude = ['b','d','e','f','g']
    cols = df.columns.difference(exclude)
    print (cols)
    Index(['a', 'c', 'h', 'i', 'j', 'k', 'l', 'm'], dtype='object')
    
    print (df[cols])
       a  c  h  i  j  k  l  m
    0  1  7  5  7  1  5  7  7
    1  2  8  3  8  3  3  4  4
    2  3  9  6  9  5  6  3  3
    

    drop 列:

    exclude = ['b','d','e','f','g']
    print (df.drop(exclude, axis=1))
       a  c  h  i  j  k  l  m
    0  1  7  5  7  1  5  7  7
    1  2  8  3  8  3  3  4  4
    2  3  9  6  9  5  6  3  3
    

    【讨论】:

      【解决方案2】:

      只是使用名称的额外建议:
      df=df.loc[:, ['a','c']].join(df.loc[:, 'h':'z'])

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 2021-08-16
        • 2018-06-30
        • 1970-01-01
        相关资源
        最近更新 更多