np.arange[100,1,-1]
array[[100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88,
87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75,
74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62,
61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36,
35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23,
22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10,
9, 8, 7, 6, 5, 4, 3, 2]]
x=np.arange[100,1,-1]
np.where[x&[x-1] == 0]
[array[[36, 68, 84, 92, 96, 98]],]
Bây giờ viết lại như thế này
x[x&[x-1] == 0]
Thật thú vị khi các giá trị Boolean có thể được sử dụng làm chỉ mục trong khung dữ liệu? . Lập chỉ mục Boolean có thể giúp chúng tôi lọc dữ liệu không cần thiết khỏi tập dữ liệu. Lọc dữ liệu có thể giúp bạn có được một số thông tin chuyên sâu mà nếu không thì không thể tìm thấy. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng lập chỉ mục Boolean để lọc và phân đoạn dữ liệu. Vì vậy, hãy bắt đầu
Lập chỉ mục Boolean trong Python
Hãy bắt đầu bằng cách tạo DataFrame. Chúng tôi sẽ tạo DataFrame bằng cách sử dụng dữ liệu về độ tuổi của một nhóm ứng viên tham gia cuộc thi
import pandas as pd # Creating a dictionary data = {'Name':["Tommy","Linda","Justin","Brendon"], 'Age':[31,24,16,22]} df = pd.DataFrame[data,index=[True,False,True,False]] print[df]
đầu ra
Name Age True Tommy 31 False Linda 24 True Justin 16 False Brendon 22
1. Sử dụng. chức năng định vị []
Đây là một chức năng tuyệt vời và đơn giản có thể giúp bạn lọc dữ liệu của mình theo chỉ số Boolean. Sử dụng chức năng này, chúng ta có thể lọc ra dữ liệu với một giá trị Boolean cụ thể. Giả sử chúng ta chuyển True sang. loc [] thì chúng ta sẽ chỉ lấy dữ liệu đã lọc có giá trị chỉ số là True. Chúng tôi không thể sử dụng số nguyên làm giá trị Boolean trong phương thức này
Ví dụ
import pandas as pd # Creating a dictionary data = {'Name':["Tommy","Linda","Justin","Brendon"], 'Age':[31,24,16,22]} df = pd.DataFrame[data,index=[True,False,True,False]] print[df.loc[True]]
đầu ra
Name Age True Tommy 31 True Justin 16
2. sử dụng. hàm iloc[]
Hàm iloc[] chỉ nhận giá trị nguyên nên chúng ta cần truyền giá trị nguyên cho hàm
Ví dụ
import pandas as pd # Creating a dictionary data = {'Name':["Tommy","Linda","Justin","Brendon"], 'Age':[31,24,16,22]} df = pd.DataFrame[data,index=[1,0,0,1]] print[df.iloc[1]]
đầu ra
Name Linda Age 24 Name: 0, dtype: object
3. Sử dụng. hàm ix[]
Đây cũng là một loại phương thức tương tự như phương thức trên, nhưng chúng ta có thể sử dụng số nguyên làm giá trị Boolean trong trường hợp này. Vì vậy, chẳng hạn, nếu chúng ta gán giá trị chỉ mục là 1 và 0, chúng ta có thể lọc các hàng có giá trị chỉ mục là 0 hoặc 1
________số 8
đầu ra
Name Age 0 Justin 16 0 Brendon 22
Phần kết luận
Tóm lại, chúng ta đã học cách sử dụng lập chỉ mục boolean trong python và lọc dữ liệu hữu ích. Hy vọng bạn thấy bài viết này hữu ích
Nhiều thư viện Python liên quan đến khoa học dữ liệu hỗ trợ khái niệm lập chỉ mục boolean [Lập chỉ mục trên ndarrays — NumPy v1. 22 Sách hướng dẫn]. Tôi muốn đề xuất phiên bản giới hạn của khái niệm này có thể hữu ích cho các lập trình viên Python thông thường
Đôi khi, một người không muốn [hoặc không thể vì yêu cầu kinh doanh] nhập các thư viện như pandas hoặc numpy với tất cả chuông và còi của chúng, nhưng vẫn muốn cách lọc danh sách ngắn gọn và hiệu quả
Ý tưởngÝ tưởng của tôi là cho phép lập chỉ mục danh sách bằng cách sử dụng danh sách các booleans có cùng độ dài
Để đưa ra một ví dụ
x[x&[x-1] == 0]
0Tương tự cũng sẽ làm việc cho các bài tập. Độ dài danh sách được chỉ định sẽ cần phải bằng số True trong các chỉ số
x[x&[x-1] == 0]
1Tôi đã viết một bản vá mẫu ngắn dành riêng cho danh sách. Tôi đoán khái niệm có thể được mở rộng sang các trình tự khác, nhưng trước tiên muốn xem liệu ý tưởng có được bất kỳ lực kéo nào không
Sử dụng bản vá đi kèm, tôi đã viết các điểm chuẩn ngắn;
"nhận được"
2x[x&[x-1] == 0]
thời gian chạy [ubuntu 20. 04, i7-4700hq]. 32. thập niên 80
3x[x&[x-1] == 0]
thời gian chạy [ubuntu 20. 04, i7-4700hq]. 12. 05s
"thiết lập các mục"
hai cái đó không hoàn toàn tương đương vì phiên bản của tôi phân bổ bộ nhớ cho một danh sách nữa ở dòng cuối cùng [lập chỉ mục getitem phân bổ danh sách mới tương tự như với cắt]
4x[x&[x-1] == 0]
thời gian chạy [ubuntu 20. 04, i7-4700hq]. 50. 14s
5x[x&[x-1] == 0]
thời gian chạy [ubuntu 20. 04, i7-4700hq]. 11. những năm 92
Mã của tôi là bằng chứng về khái niệm, vì vậy tôi hy vọng phiên bản cuối cùng sẽ chậm hơn do kiểm tra an toàn, nhưng đối với tôi, tính đồng nhất và lợi ích về hiệu suất có vẻ thú vị
Nếu có hứng thú với khái niệm này, tôi có thể dành thời gian thực hiện. Cho tôi biết bạn nghĩ gì