Chọn cột gấu trúc theo vị trí


101

Tôi chỉ đơn giản là đang cố gắng truy cập các cột gấu trúc được đặt tên bằng một số nguyên.

Bạn có thể chọn một hàng theo vị trí bằng cách sử dụng df.ix[3].

Nhưng làm thế nào để chọn một cột theo số nguyên?

Khung dữ liệu của tôi:

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

Cập nhật để đặt một câu hỏi.
Jason Strimpel

Trong ví dụ này, thứ tự của các cột có thể không được xác định. ('a' có thể là cột đầu tiên hoặc cột thứ hai).
user48956

Câu trả lời:


152

Hai cách tiếp cận mà bạn nghĩ đến:

>>> 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

Chỉnh sửa : Câu trả lời ban đầu đề xuất sử dụng df.ix[:,2]nhưng chức năng này hiện không được dùng nữa. Người dùng nên chuyển sang df.iloc[:,2].


28
FYI df.ix nay được thay thế bằng df.iloc
yosemite_k

Lưu ý rằng nếu bạn có hai cột có cùng tên thì phương thức df.iloc [:, 2] hoạt động, chỉ trả về một cột nhưng phương thức df [df.columns [2]] sẽ trả về cả hai cột có cùng tên.
BobbyG

54

Bạn cũng có thể sử dụng df.icol(n)để truy cập một cột theo số nguyên.

Cập nhật: icolkhông được dùng nữa và bạn có thể đạt được chức năng tương tự bằng cách:

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

2
Lưu ý rằng đối với phiên bản 0.11.0 sắp tới, các phương pháp này không được dùng nữa và có thể bị xóa trong các phiên bản sau. Xem pandas.pydata.org/pandas-docs/dev/… về cách chọn theo vị trí bằng iloc / iat.
Wouter Overmeire

1
Liên kết trên không được dùng nữa vì các tài liệu lập chỉ mục đã được cấu trúc lại: pandas.pydata.org/pandas-docs/stable/… . Cho đến ngày hôm nay, trong đó phiên bản gần đây nhất là 0.21.0, ilocvẫn là cách tiếp cận được ghi chép lại để truy cập một cột theo vị trí.
iff_or

21

Bạn có thể sử dụng nhãn dựa trên .loc hoặc dựa trên chỉ mục bằng cách sử dụng phương thức .iloc để thực hiện cắt cột bao gồm các phạm vi cột:

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

6

Bạn có thể truy cập nhiều cột bằng cách chuyển danh sách các chỉ số cột đến dataFrame.ix.

Ví dụ:

>>> 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

1

Phương thức .transpose () chuyển đổi cột thành hàng và hàng thành cột, do đó bạn thậm chí có thể viết

df.transpose().ix[3]

2
Việc chuyển đổi có thể gây rối với các kiểu dữ liệu.
IanS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.