按标签(pandas)选择多个列

问题描述 投票:30回答:2

我一直在寻找通过python文档和论坛选择列的方法,但索引列上的每个示例都过于简单。

假设我有一个10 x 10的数据帧

df = DataFrame(randn(10, 10), index=range(0,10), columns=['A', 'B', 'C', 'D','E','F','G','H','I','J'])

到目前为止,所有文档都只是一个索引的简单例子

subset = df.loc[:,'A':'C']

要么

subset = df.loc[:,'C':]

但是当我尝试索引多个非顺序列时,我得到一个错误,就像这样

subset = df.loc[:,('A':'C', 'E')]

如果我想从A到C,E和G中选择A列,我将如何在Pandas中编入索引?看来这个逻辑不起作用

subset = df.loc[:,('A':'C', 'E', 'G':'I')]

我觉得解决方案非常简单,但我无法解决这个错误。谢谢!

python pandas
2个回答
38
投票

Name- or Label-Based (using regular expression syntax)

df.filter(regex='[A-CEG-I]')   # does NOT depend on the column order

Location-Based (depends on column order)

df[ list(df.loc[:,'A':'C']) + ['E'] + list(df.loc[:,'G':'I']) ]

请注意,与基于标签的方法不同,这仅适用于按行按字母顺序排序的列。然而,这不一定是个问题。例如,如果你的列是['A','C','B'],那么你可以用'A':'C'替换上面的'A':'B'

The Long Way

为了完整起见,您总是可以让@Magdalena显示单独列出每列的选项,尽管随着列数的增加可能会更加冗长:

df[['A','B','C','E','G','H','I']]   # does NOT depend on the column order

Results for any of the above methods

          A         B         C         E         G         H         I
0 -0.814688 -1.060864 -0.008088  2.697203 -0.763874  1.793213 -0.019520
1  0.549824  0.269340  0.405570 -0.406695 -0.536304 -1.231051  0.058018
2  0.879230 -0.666814  1.305835  0.167621 -1.100355  0.391133  0.317467

17
投票

只需直接选择您想要的列....

df[['A','E','I','C']]
© www.soinside.com 2019 - 2024. All rights reserved.