按位置选择大熊猫专栏

我只是试图通过一个整数来访问命名的熊猫列。

可以使用 df.ix[3]按位置选择行。

但是如何通过整数选择列呢?

我的数据框架:

df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)})
285571 次浏览

我想到了两种方法:

>>> df
A         B         C         D
0  0.424634  1.716633  0.282734  2.086944
1 -1.325816  2.056277  2.583704 -0.776403
2  1.457809 -0.407279 -1.560583 -1.316246
3 -0.757134 -1.321025  1.325853 -2.513373
4  1.366180 -1.265185 -2.184617  0.881514
>>> df.iloc[:, 2]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C
>>> df[df.columns[2]]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C

编辑 : 最初的答案建议使用 df.ix[:,2],但是现在不推荐使用这个函数,用户应该切换到 df.iloc[:,2]

还可以使用 df.icol(n)按整数访问列。

更新: 不推荐使用 icol,同样的功能可以通过以下方式实现:

df.iloc[:, n]  # to access the column at the nth position

Transose ()方法将列转换为行,将行转换为列,因此您甚至可以编写

df.transpose().ix[3]

你可以用 使用基于.loc 的标签或使用基于.iloc 的索引来进行包括列范围的列切片:

In [50]: import pandas as pd


In [51]: import numpy as np


In [52]: df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))


In [53]: df
Out[53]:
a         b         c         d
0  0.806811  0.187630  0.978159  0.317261
1  0.738792  0.862661  0.580592  0.010177
2  0.224633  0.342579  0.214512  0.375147
3  0.875262  0.151867  0.071244  0.893735


In [54]: df.loc[:, ["a", "b", "d"]] ### Selective columns based slicing
Out[54]:
a         b         d
0  0.806811  0.187630  0.317261
1  0.738792  0.862661  0.010177
2  0.224633  0.342579  0.375147
3  0.875262  0.151867  0.893735


In [55]: df.loc[:, "a":"c"] ### Selective label based column ranges slicing
Out[55]:
a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244


In [56]: df.iloc[:, 0:3] ### Selective index based column ranges slicing
Out[56]:
a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244

可以通过将列索引列表传递给 dataFrame.ix来访问多个列。

例如:

>>> df = pandas.DataFrame({
'a': np.random.rand(5),
'b': np.random.rand(5),
'c': np.random.rand(5),
'd': np.random.rand(5)
})


>>> df
a         b         c         d
0  0.705718  0.414073  0.007040  0.889579
1  0.198005  0.520747  0.827818  0.366271
2  0.974552  0.667484  0.056246  0.524306
3  0.512126  0.775926  0.837896  0.955200
4  0.793203  0.686405  0.401596  0.544421


>>> df.ix[:,[1,3]]
b         d
0  0.414073  0.889579
1  0.520747  0.366271
2  0.667484  0.524306
3  0.775926  0.955200
4  0.686405  0.544421

大多数人都回答了如何从索引开始获取列。但在某些情况下,您可能需要从中间索引或特定索引中选择列,您可以使用下面的解决方案。

假设你有 ABC列。如果只需要选择 AC列,可以使用下面的代码。

df = df.iloc[:, [0,2]]

其中 0,2指定您只需要选择第1列和第3列。