【问题标题】:Select multiple columns and slice columns at the same time with .loc method使用 .loc 方法同时选择多个列和切片列
【发布时间】:2019-06-25 03:39:21
【问题描述】:

考虑到这个 Pandas DataFrame df:

  A   B   C   D   E   F
0
1
2

使用 .loc 方法,我可以像这样选择特定的列:

df.loc[:, ['A','B','E']]

或者我可以分割一些列,例如:

df.loc[:,'B':'E']

我的问题是?这种方法可以允许结合这两个选项吗?例如选择第一列并切片其他列? 我试过了:

df.loc[:,['A','D':'F']]

用于选择 A、D、E、F 列。

正确的语法是什么?

【问题讨论】:

  • 据我所知,列名无法做到这一点,但列位置更友好
  • df.loc[:, ['A']].join(df.loc[:, 'D':'F'])
  • @piRSquared 提供了所需的输出,但最初的问题是是否存在允许不相交范围的切片语法,不是吗?

标签: python pandas dataframe


【解决方案1】:

您无法使用带有loc 的标签来执行此操作,但您可以使用位置和np.r_ + iloc 执行此操作(这是最接近的解决方法)。

f = df.columns.get_loc
df.iloc[:, np.r_[f('A'), f('D'):f('F')]]
    A   D   E
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN

这是假设您的列名是唯一的。

【讨论】:

    【解决方案2】:

    你可以简单地使用join来完成它

    df[['A']].join(df.loc[:, 'D':'F'])
    

    输出:

    A   D   E   F
    

    【讨论】:

      【解决方案3】:

      pd.concatmap slices

      这是一种通用方法,应该可以按预期工作。

      sublocs = [slice('A'), slice('D', 'F')]
      loc = lambda s: df.loc[:, s]
      pd.concat(map(loc, sublocs), axis=1)
      
         A  D  E  F
      0  1  1  1  1
      1  1  1  1  1
      2  1  1  1  1
      

      完全令人讨厌的变种

      sublocs = [slice('A'), slice('D', 'F')]
      pd.concat(map(df.T.loc.__getitem__, sublocs)).T
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-13
        • 2018-10-13
        • 2021-04-10
        • 1970-01-01
        • 2018-09-07
        • 2013-09-13
        • 1970-01-01
        • 2017-08-11
        相关资源
        最近更新 更多