Chọn hàng gấu trúc dựa trên chỉ mục danh sách


105

Tôi có một khung dữ liệu df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Sau đó, tôi muốn chọn các hàng có số thứ tự nhất định được chỉ ra trong danh sách, giả sử ở đây là [1,3], sau đó sang trái:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Làm thế nào hoặc chức năng nào có thể làm điều đó?

Câu trả lời:


130
List = [1, 3]
df.ix[List]

nên làm thủ thuật! Khi tôi lập chỉ mục với các khung dữ liệu, tôi luôn sử dụng phương thức .ix (). Nó rất dễ dàng và linh hoạt hơn ...

CẬP NHẬT Đây không còn là phương pháp được chấp nhận để lập chỉ mục. Các ixphương pháp bị phản đối. Sử dụng .ilocđể lập chỉ mục dựa trên số nguyên và .loclập chỉ mục dựa trên nhãn.


14
Tính năng này hiện không được dùng nữa, .iloc nên được sử dụng để lập chỉ mục vị trí
t_warsop

86

bạn cũng có thể sử dụng iloc:

df.iloc[[1,3],:]

Điều này sẽ không hoạt động nếu các chỉ mục trong khung dữ liệu của bạn không tương ứng với thứ tự của các hàng do tính toán trước. Trong trường hợp đó, hãy sử dụng:

df.index.isin([1,3])

... như được đề xuất trong các câu trả lời khác.


61

Một cách khác (tuy là mã dài hơn) nhưng nó nhanh hơn các mã trên. Kiểm tra nó bằng cách sử dụng hàm% timeit:

df[df.index.isin([1,3])]

PS: Bạn tìm ra lý do

nhập mô tả hình ảnh ở đây


1
sử dụng df.index.get_level_values(0).isincho multiindex
CiaranWelsh

4

Đối với các tập dữ liệu lớn, sẽ tiết kiệm bộ nhớ nếu chỉ đọc các hàng đã chọn thông qua skiprowstham số.

Thí dụ

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Thao tác này bây giờ sẽ trả về DataFrame từ một tệp bỏ qua tất cả các hàng ngoại trừ 1 và 3.


Chi tiết

Từ các tài liệu :

skiprows : dạng danh sách hoặc số nguyên hoặc có thể gọi, mặc định None

...

Nếu có thể gọi được, hàm có thể gọi sẽ được đánh giá dựa trên các chỉ số hàng, trả về True nếu hàng đó nên được bỏ qua và nếu không thì là False. Ví dụ về đối số có thể gọi hợp lệ sẽ làlambda x: x in [0, 2]

Tính năng này hoạt động trong phiên bản gấu trúc 0.20.0+. Xem thêm vấn đề tương ứng và một bài đăng liên quan .

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.