使用.loc方法同时选择多个列和切片列

时间:2019-06-24 18:45:29

标签: python pandas dataframe

考虑到此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列。

哪种语法正确?

3 个答案:

答案 0 :(得分:4)

您不能自然地使用带有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

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

答案 1 :(得分:4)

您可以简单地使用join

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

输出:

A   D   E   F

答案 2 :(得分:1)

pd.concatmap slice s

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

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