Chúng tôi sẽ sử dụng tập dữ liệu chứa thông tin chi tiết về các chuyến bay khởi hành từ NYC vào năm 2013. Tập dữ liệu này có 336776 hàng và 16 cột. Xem tên cột bên dưới. Để nhập tập dữ liệu, chúng tôi đang sử dụng hàm
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]2 từ gói gấu trúc
['year', 'month', 'day', 'dep_time', 'dep_delay', 'arr_time', 'arr_delay', 'carrier', 'tailnum', 'flight', 'origin', 'dest', 'air_time', 'distance', 'hour', 'minute']
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]
Lọc pandas dataframe theo giá trị cột
Chọn chi tiết chuyến bay của JetBlue Airways có 2 chữ cái mã hãng hàng không
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]3 xuất phát từ sân bay
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]4
Phương pháp 1. Cách khung dữ liệu
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]
- Dữ liệu được lọc [sau khi đặt con] được lưu trữ trên khung dữ liệu mới có tên là
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]
5 - Ký hiệu
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]
6 đề cập đến điều kiệnnewdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]
7 có nghĩa là đáp ứng cả hai tiêu chí - Phần mã này
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]
8 trả về True/False. Đúng khi điều kiện thỏa mãn và Sai khi điều kiện không thỏa mãn. Sau đó, nó được truyền trong df và trả về tất cả các hàng tương ứng với True. Nó trả về 4166 hàng
Phương pháp 2. Chức năng truy vấn
Trong gói gấu trúc, có nhiều cách để thực hiện lọc. Đoạn mã trên cũng có thể được viết giống như đoạn mã dưới đây. Phương pháp này thanh lịch và dễ đọc hơn và bạn không cần phải đề cập đến tên khung dữ liệu mỗi khi bạn chỉ định các cột [biến].newdf = df.query['origin == "JFK" & carrier == "B6"']Cách truyền biến trong hàm truy vấn
Phương pháp 3. chức năng định vị
loc là viết tắt của thuật ngữ vị trí. Cả 3 phương thức này đều trả về cùng một đầu ra. Đó chỉ là một cách khác để lọc hàng.newdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]
Lọc khung dữ liệu Pandas theo vị trí hàng và cột
Giả sử bạn muốn chọn các hàng cụ thể theo vị trí của chúng [giả sử từ hàng thứ hai đến hàng thứ năm]. Chúng ta có thể sử dụng hàmnewdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]9 cho cùng một
Lập chỉ mục trong python bắt đầu từ con số không. df. iloc[0. 5,] đề cập đến hàng đầu tiên đến hàng thứ năm [không bao gồm điểm cuối hàng thứ 6 ở đây]. df. iloc[0. 5,] tương đương với df. iloc[. 5,]
df.iloc[:5,] #First 5 rows df.iloc[1:5,] #Second to Fifth row df.iloc[5,0] #Sixth row and 1st column df.iloc[1:5,0] #Second to Fifth row, first column df.iloc[1:5,:5] #Second to Fifth row, first 5 columns df.iloc[2:7,1:3] #Third to Seventh row, 2nd and 3rd column
Sự khác biệt giữa chức năng loc và iloc
loc xem xét các hàng dựa trên nhãn chỉ mục. Trong khi iloc xem xét các hàng dựa trên vị trí trong chỉ mục nên nó chỉ lấy số nguyên. Hãy tạo một dữ liệu mẫu để minh họaimport numpy as np x = pd.DataFrame[{"col1" : np.arange[1,20,2]}, index=[9,8,7,6,0, 1, 2, 3, 4, 5]]
col1 9 1 8 3 7 5 6 7 0 9 1 11 2 13 3 15 4 17 5 19
iloc - Vị trí chỉ mục____17_______Chọn hàng dựa trên chỉ mục hoặc vị trí hàng
loc - Nhãn chỉ mục
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]0Chọn hàng dựa trên nhãn của chỉ mục
Làm thế nào
newdf = df.query['origin == "JFK" & carrier == "B6"']0 trả về 6 hàng [bao gồm 5 là phần tử thứ 6]?
Đó là bởi vì
newdf = df.query['origin == "JFK" & carrier == "B6"']1 không tạo ra đầu ra dựa trên vị trí chỉ số. Nó chỉ xem xét các nhãn của chỉ mục cũng có thể là bảng chữ cái và bao gồm cả điểm bắt đầu và điểm kết thúc. Tham khảo ví dụ bên dưới
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]1
Lọc khung dữ liệu gấu trúc theo vị trí hàng và tên cột
Ở đây chúng tôi đang chọn năm hàng đầu tiên của hai cột có tên gốc và đích.import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]2
newdf = df.query['origin == "JFK" & carrier == "B6"']2 trả về nhãn chỉ mục. df. chỉ mục [0. 5] là bắt buộc thay vì 0. 5 [không có df. index] vì các nhãn chỉ mục không phải lúc nào cũng theo thứ tự và bắt đầu từ 0. Nó có thể bắt đầu từ bất kỳ số nào hoặc thậm chí có thể có các chữ cái trong bảng chữ cái. Tham khảo ví dụ mà chúng tôi đã so sánh iloc và loc
Chọn nhiều giá trị của một cột
Giả sử bạn muốn bao gồm tất cả các chi tiết chuyến bay có điểm xuất phát là JFK hoặc LGA.import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]3_______11_______3 ngụ ý điều kiện HOẶC có nghĩa là bất kỳ điều kiện nào đúng.
newdf = df.query['origin == "JFK" & carrier == "B6"']4 tương tự như toán tử IN trong SAS và R, có thể nhận nhiều giá trị và áp dụng điều kiện OR. Đảm bảo bạn chỉ định các giá trị trong danh sách [ ]
Chọn các hàng có giá trị cột không bằng một giá trị cụ thể
Trong ví dụ này, chúng tôi đang xóa tất cả các chi tiết chuyến bay có nguồn gốc từ JFK.newdf = df.query['origin == "JFK" & carrier == "B6"']5 ngụ ý KHÔNG BẰNG.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]4Hãy kiểm tra xem dòng mã trên có hoạt động tốt hay không bằng cách xem xét các giá trị duy nhất của cột gốc trong newdf.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]5
Làm thế nào để phủ nhận toàn bộ điều kiện
Dấu ngãnewdf = df.query['origin == "JFK" & carrier == "B6"']6 được dùng để phủ định điều kiện. Nó tương đương với toán tử NOT trong SAS và R.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]6
Chọn dữ liệu không bị thiếu trong Pandas Dataframe
Với việc sử dụng hàmnewdf = df.query['origin == "JFK" & carrier == "B6"']7, bạn có thể loại trừ hoặc loại bỏ các giá trị NA và NAN. Trong ví dụ bên dưới, chúng tôi đang xóa các giá trị bị thiếu khỏi cột gốc. Vì khung dữ liệu này không chứa bất kỳ giá trị trống nào, nên bạn sẽ tìm thấy cùng một số hàng trong newdf.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]7
Chuỗi lọc trong Pandas Dataframe
Nó thường được coi là khó khăn để xử lý dữ liệu văn bản. Nhưng python giúp dễ dàng hơn khi xử lý các cột ký tự hoặc chuỗi. Hãy chuẩn bị một dữ liệu giả chẳng hạn.import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]8
Chọn các hàng có giá trị bắt đầu từ chữ 'A'
Bằng cách sử dụngnewdf = df.query['origin == "JFK" & carrier == "B6"']8, bạn có thể kích hoạt các hàm chuỗi và có thể áp dụng trên pandas dataframe. str[0] có nghĩa là chữ cái đầu tiên.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/JackyP/testing/master/datasets/nycflights.csv", usecols=range[1,17]]9
Lọc các hàng có độ dài chuỗi lớn hơn 3
Hàmnewdf = df.query['origin == "JFK" & carrier == "B6"']9 tính độ dài của iterable.
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]0
Chọn chuỗi chứa chữ cái A hoặc B
newdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]0 tương tự như câu lệnh LIKE trong SQL và SAS. Bạn có thể tập hợp con dữ liệu bằng cách đề cập đến mẫu trong hàm chứa [].
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]1
Xử lý khoảng trắng trong tên cột khi lọc
Hãy đổi tên cột var1 với khoảng trắng ở giữa var 1 Chúng ta có thể đổi tên cột bằng cách sử dụng chức năng đổi tên.newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]2Bằng cách sử dụng dấu ngược
newdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]1, chúng tôi có thể bao gồm cột có khoảng trống. Xem mã ví dụ bên dưới.
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]3
Backticks được hỗ trợ từ phiên bản 0. 25 gói gấu trúc. Chạy lệnh này trong bảng điều khiển để kiểm tra phiên bản gấu trúc
newdf.head[] Out[23]: year month day dep_time .. air_time distance hour minute 3 2013 1 1 544.0 .. 183.0 1576 5.0 44.0 8 2013 1 1 557.0 .. 140.0 944 5.0 57.0 10 2013 1 1 558.0 .. 149.0 1028 5.0 58.0 11 2013 1 1 558.0 .. 158.0 1005 5.0 58.0 15 2013 1 1 559.0 .. 44.0 187 5.0 59.0 [5 rows x 16 columns]0 Nếu bạn có phiên bản trước phiên bản 0. 25 bạn có thể nâng cấp nó bằng cách sử dụng lệnh này
newdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]3
Cách lọc dữ liệu mà không cần sử dụng gói pandas
Bạn có thể thực hiện lọc bằng các phương thức python thuần túy mà không phụ thuộc vào gói gấu trúcCảnh báo. Các phương pháp hiển thị bên dưới để lọc không hiệu quả. Mục tiêu chính của việc hiển thị các phương pháp sau là chỉ ra cách thực hiện cài đặt con mà không cần sử dụng gói gấu trúc. Trong dự án trực tiếp của bạn, bạn nên sử dụng các hàm dựng sẵn của gấu trúc [truy vấn[], loc[ ], iloc[ ]] đã được giải thích ở trên
Chúng tôi không cần tạo một khung dữ liệu để lưu trữ dữ liệu. Chúng ta có thể lưu trữ nó trong cấu trúc dữ liệu danh sách.newdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]4 chứa dữ liệu chuyến bay được nhập từ tệp CSV.
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]4
Phương pháp Lambda để lọc
Lambda là một cách khác để xác định hàm do người dùng xác định. Với việc sử dụng lambda, bạn có thể xác định chức năng trong một dòng mã. Bạn có thể kiểm tra liên kết này để tìm hiểu thêm về nó.newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]5Nếu bạn đang thắc mắc cách sử dụng hàm lambda này trên khung dữ liệu, bạn có thể gửi mã bên dưới.
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]6
Liệt kê phương pháp hiểu để lọc
Khả năng hiểu danh sách là một giải pháp thay thế cho hàm lambda và làm cho mã dễ đọc hơn. Hướng dẫn chi tiết. Khả năng hiểu danh sách_______5_______7Bạn có thể sử dụng khả năng hiểu danh sách trên khung dữ liệu như cách hiển thị bên dưới.newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]8
Tạo lớp để lọc
Python là một ngôn ngữ lập trình hướng đối tượng trong đó mã được triển khai bằng cách sử dụngnewdf = df.loc[[df.origin == "JFK"] & [df.carrier == "B6"]]5.
newdf = df[[df.origin == "JFK"] & [df.carrier == "B6"]]9
Học Python. 50 hướng dẫn Python hàng đầu
Thông báo
Chia sẻ Chia sẻ Tweet Đăng ký
bài viết liên quan
về tác giả
Deepanshu thành lập ListenData với một mục tiêu đơn giản - Làm cho các phân tích trở nên dễ hiểu và dễ theo dõi. Ông có hơn 10 năm kinh nghiệm trong lĩnh vực khoa học dữ liệu. Trong nhiệm kỳ của mình, ông đã làm việc với các khách hàng toàn cầu trong nhiều lĩnh vực khác nhau như Ngân hàng, Bảo hiểm, Cổ phần tư nhân, Viễn thông và Nhân sự