Tỷ lệ phần trăm giá trị null trong một pandas cột

Pandas là một công cụ đặc biệt cho phép chúng tôi thực hiện các thao tác dữ liệu phức tạp một cách hiệu quả và hiệu quả. Bên trong gấu trúc, chúng tôi chủ yếu xử lý tập dữ liệu ở dạng DataFrame. DataFrames là cấu trúc dữ liệu 2 chiều trong gấu trúc. DataFrames bao gồm các hàng, cột và dữ liệu

Trong khi tạo DataFrame hoặc nhập tệp CSV, có thể có một số giá trị NaN trong các ô. Giá trị NaN có nghĩa là "Không phải là số", điều này thường có nghĩa là có một số giá trị bị thiếu trong ô. Để xử lý loại dữ liệu này, bạn có thể xóa hàng cụ thể [nếu số lượng giá trị bị thiếu thấp] hoặc bạn có thể xử lý các giá trị này

Để xử lý các giá trị này, bạn có thể cần đếm số lượng giá trị NaN hoặc bạn cần đếm số lượng giá trị không phải NaN

Để tìm phần trăm giá trị NaN trong mỗi cột trong tập dữ liệu đã cho, trước tiên chúng tôi sẽ đếm giá trị còn thiếu trong mỗi cột và áp dụng hàm tổng

Sau khi áp dụng hàm tổng, chúng ta sẽ chia giá trị này cho độ dài của cột để có được tỷ lệ phần trăm của các giá trị NaN

dg[col].apply[pd.isnull] là một mảng gồm 1 và 0', nên giá trị trung bình của nó bằng tổng của tất cả các số 1 chia cho tổng số, a. k. một tỷ lệ phần trăm của các giá trị NaN

Bạn cũng có thể viết nó mà không cần vòng lặp for

dg.apply[pd.isnull].mean[]

nhưng trường hợp này cũng trả về một hàng có giá trị bằng 0 cho bins

Trong hướng dẫn này, chúng tôi sẽ đề cập đến một phương pháp hiệu quả và đơn giản để tìm phần trăm giá trị bị thiếu trong Khung dữ liệu Pandas. Hướng dẫn này có sẵn dưới dạng video trên YouTube

Bắt đầu làm chủ Khoa học dữ liệu ngay bây giờ miễn phí

Tham gia khóa học Giới thiệu về Pandas miễn phí của tôi để bắt đầu hành trình làm chủ phân tích dữ liệu với Python

Giải pháp không trực quan

Giải pháp cuối cùng cho vấn đề này không hoàn toàn trực quan đối với hầu hết mọi người khi họ gặp phải nó lần đầu tiên. Chúng tôi sẽ từ từ xây dựng nó và cũng cung cấp một số phương pháp khác giúp chúng tôi có được kết quả gần nhưng không chính xác như những gì chúng tôi muốn

Bộ dữ liệu chuyến bay

Chúng tôi bắt đầu bằng cách đọc trong bộ dữ liệu chuyến bay, chứa thông tin chuyến bay nội địa của Hoa Kỳ trong năm 2015. Pandas mặc định số cột hiển thị là 20. Vì có 31 cột trong DataFrame này, chúng tôi thay đổi tùy chọn này bên dưới

>>> import pandas as pd
>>> pd.options.display.max_columns = 100
>>> pd.read_csv['flights.csv']
>>> flights.head[]

Sau khi kiểm tra một vài hàng đầu tiên của DataFrame, nhìn chung, bạn nên tìm tổng số hàng và cột có thuộc tính 

>>> flights.shape
[58492, 31]

>>> flights.shape
[58492, 31]

phương pháp thông tin

Pandas đi kèm với một số phương pháp giúp chúng ta tiến gần đến những gì chúng ta muốn mà không cần đưa chúng ta đến đó. Phương thức 

>>> flights.shape
[58492, 31]
6 in ra màn hình số lượng giá trị không thể thiếu của mỗi cột, cùng với loại dữ liệu của từng cột và một số siêu dữ liệu khác

>>> flights.info[]

Phương pháp 
>>> flights.shape
[58492, 31]

Phương thức 

>>> flights.shape
[58492, 31]
7 trả về số lượng giá trị không bị thiếu cho mỗi cột hoặc hàng. Theo mặc định, nó hoạt động theo cột. Nó không cung cấp cho chúng tôi thêm bất kỳ thông tin nào đã có sẵn với phương pháp 
>>> flights.shape
[58492, 31]
6. Dưới đây, chúng tôi chỉ xuất 5 giá trị cuối cùng

>>> flights.count[].tail[]

Các đối tượng được trả về của phương thức thông tin và đếm

Mặc dù phương thức 

>>> flights.shape
[58492, 31]
7 không mang lại cho chúng tôi bất kỳ thông tin bổ sung nào so với phương thức 
>>> flights.shape
[58492, 31]
6, nhưng phương thức này trả về một Pandas 
>>> flights.info[]
2 có thể được sử dụng để xử lý thêm. Phương thức 
>>> flights.shape
[58492, 31]
6 in kết quả của nó ra màn hình và trả về đối tượng 
>>> flights.info[]
4. Hãy xác minh điều này dưới đây

>>> info_return = flights.info[]
>>> count_return = flights.count[]
>>> info_return is None
True>>> type[count_return]
pandas.core.series.Series

Phương pháp 
>>> flights.info[]

Phương thức 

>>> flights.info[]
5 trả về một DataFrame gồm tất cả các giá trị boolean [True/False]. Hình dạng của DataFrame không thay đổi so với ban đầu. Mỗi giá trị được kiểm tra xem nó có bị thiếu hay không. Nếu đúng như vậy thì giá trị mới của nó là 
>>> flights.info[]
7 nếu không thì là 
>>> flights.info[]
8

>>> flights_missing = flights.isna[]
>>> flights_missing.head[]

Một số cột đầu tiên không có bất kỳ giá trị bị thiếu nào trong một vài hàng đầu tiên của chúng, nhưng nếu chúng ta cuộn đến cuối, chúng ta có thể thấy nhiều giá trị bị thiếu vẫn tồn tại

Nếu bạn thích bài viết này, hãy cân nhắc mua Master Data Analysis with Python đây là một khóa học cực kỳ toàn diện sẽ giúp bạn tìm hiểu gấu trúc để phân tích dữ liệu

Đảm bảo chúng tôi có tất cả các cột boolean

Chúng tôi có thể xác minh rằng kết quả của việc gọi phương thức 

>>> flights.info[]
5 thực sự là một DataFrame mới với tất cả các cột có kiểu dữ liệu boolean. Hãy gọi thuộc tính 
>>> flights.count[].tail[]
0

>>> flights_missing.dtypes

Điều này đảm bảo với chúng tôi rằng mọi giá trị đơn lẻ trong toàn bộ đều là Đúng hoặc Sai

Tổng hợp một DataFrame boolean

Booleans trong Python được coi là số khi thực hiện các phép toán số học. Đánh giá sai là 0 và Đúng đánh giá là 1. Do đó, chúng ta có thể gọi phương thức 

>>> flights.count[].tail[]
1 trên DataFrame, theo mặc định, phương thức này tổng hợp độc lập từng cột

>>> flights_num_missing = flights_missing.sum[]
>>> flights_num_missing

Giải thích đầu ra này

Chúng tôi đã tổng hợp từng cột trong DataFrame boolean, chỉ tổng hợp các giá trị Sai và Đúng. Kết quả này chỉ trả về số lượng giá trị là True. Trong trường hợp của chúng tôi, các giá trị True biểu thị các giá trị bị thiếu trong Khung dữ liệu ban đầu của chúng tôi, vì vậy chúng tôi hiện có số lượng giá trị bị thiếu trong mỗi cột

Biến kết quả này thành tỷ lệ phần trăm

Bây giờ chúng ta có tổng số giá trị bị thiếu trong mỗi cột, chúng ta có thể chia từng giá trị trong Sê-ri cho số hàng. Hàm 

>>> flights.count[].tail[]
2 tích hợp trả về số lượng hàng trong DataFrame

>>> len[flights]
58492
>>> flights_num_missing / len[flights]

Ta vừa thực hiện thao tác đơn giản nào?

Có một tên cho hoạt động mà chúng tôi vừa hoàn thành. Tính tổng tất cả các giá trị trong một cột rồi chia cho tổng số là giá trị trung bình

Sử dụng trực tiếp phương thức 
>>> flights.count[].tail[]

Thay vì gọi phương thức 

>>> flights.count[].tail[]
1 và chia cho số hàng, chúng ta có thể gọi phương thức 
>>> flights.count[].tail[]
3 trực tiếp trên 
>>> flights.count[].tail[]
6 DataFrame. Điều này tạo ra kết quả chính xác giống như đầu ra cuối cùng

>>> flights_missing.mean[]

Đầu ra không được hiển thị vì nó giống hệt như đầu ra cuối cùng

Giải pháp một dòng

Chúng tôi có thể kết hợp tất cả công việc của mình trong một dòng mã bắt đầu bằng DataFrame chuyến bay của chúng tôi. Chúng tôi loại bỏ nhiễu thập phân dư thừa bằng cách làm tròn rồi nhân từng giá trị với 100 để lấy tỷ lệ phần trăm

>>> flights.shape
[58492, 31]
0

Một giải pháp thay thế với phương pháp 
>>> flights.count[].tail[]
7

Ngoài ra, chúng ta có thể nhận được kết quả tương tự bằng cách lấy kết quả của phương thức 

>>> flights.shape
[58492, 31]
7 và chia cho số hàng. Điều này cung cấp cho chúng tôi tỷ lệ phần trăm giá trị không bị thiếu trong mỗi cột

>>> flights.shape
[58492, 31]
1

Từ đây, chúng ta có thể lấy 1 trừ từng giá trị trong Chuỗi để nhận được kết quả tương tự như giải pháp một dòng ở trên. Một lần nữa, đầu ra đã không được hiển thị

>>> flights.shape
[58492, 31]
2

Nắm vững Python, Khoa học dữ liệu và Máy học

Đắm chìm trong lộ trình toàn diện của tôi để thành thạo khoa học dữ liệu và máy học với Python. Mua All Access Pass để có quyền truy cập trọn đời vào tất cả các khóa học hiện tại và tương lai. Một số khóa học nó chứa

  • Nắm vững các nguyên tắc cơ bản của Python— Giới thiệu toàn diện về Python [hơn 300 trang, hơn 150 bài tập]
  • Phân tích dữ liệu tổng thể với Python — Khóa học toàn diện nhất hiện có để tìm hiểu gấu trúc. [hơn 800 trang và hơn 500 bài tập]
  • Master Machine Learning với Python — Đi sâu vào thực hiện machine learning với scikit-learning được cập nhật liên tục để giới thiệu những công cụ mới nhất và tốt nhất. [hơn 300 trang]

Nhận All Access Pass ngay bây giờ.  

Tổng quát hóa các hoạt động boolean

Ý tưởng tương tự này có thể được sử dụng cho bất kỳ Sê-ri/Khung dữ liệu boolean nào. Hãy xem cách chúng tôi có thể tìm thấy số lượng và tỷ lệ phần trăm các chuyến bay bị hoãn hạ cánh lâu hơn 60 phút

Trước tiên, hãy xác định xem mỗi chuyến bay có thời gian đến trễ hơn 60 phút hay không bằng cách sử dụng phép so sánh boolean và gán kết quả cho một biến

>>> flights.shape
[58492, 31]
3

Sử dụng các phương pháp tổng và trung bình để tìm tổng và tỷ lệ phần trăm

Sau khi tạo Sê-ri/Khung dữ liệu boolean, chúng tôi có thể sử dụng các phương pháp 

>>> flights.count[].tail[]
1 và 
>>> flights.count[].tail[]
3 để tìm tổng số và tỷ lệ phần trăm của các giá trị là True. Trong trường hợp này, đó là số lượng và tỷ lệ phần trăm các chuyến bay bị chậm giờ đến hơn một giờ

>>> flights.shape
[58492, 31]
4

Bây giờ chúng tôi có thể báo cáo rằng chúng tôi có 3.626 chuyến bay hoặc 6. 2% có sự chậm trễ đến hơn một giờ

Quy trình hai bước để tìm tổng số hoặc tỷ lệ phần trăm của Giá trị thực

Chúng ta có thể rút gọn ý tưởng thành hai bước

  1. Tạo một chuỗi boolean/DataFrame
  2. Gọi 
    >>> flights.count[].tail[]
    1 để tìm số lượng Giá trị thực và 
    >>> flights.count[].tail[]
    3 để tìm phần trăm giá trị Thực

Phần kết luận

Có một cách hiệu quả và đơn giản để tính tỷ lệ phần trăm của các giá trị bị thiếu trong mỗi cột của Khung dữ liệu Pandas. Lúc đầu, điều này có thể không trực quan, nhưng khi chúng tôi chia nhỏ ý tưởng thành các phép tính tổng và chia cho số hàng, rõ ràng là chúng tôi có thể sử dụng phương pháp 

>>> flights.count[].tail[]
3 để cung cấp kết quả trực tiếp. Ý tưởng này có thể được khái quát hóa cho bất kỳ Sê-ri boolean hoặc DataFrame nào

Làm cách nào để tính phần trăm giá trị bị thiếu trong gấu trúc?

Để tìm tỷ lệ phần trăm của các giá trị NaN trong mỗi cột trong tập dữ liệu đã cho, trước tiên chúng tôi sẽ đếm giá trị còn thiếu trong mỗi cột và áp dụng hàm tổng. Sau khi áp dụng hàm tổng, chúng ta sẽ chia giá trị này cho độ dài của cột để có được tỷ lệ phần trăm của các giá trị NaN

Làm cách nào để hiển thị tỷ lệ phần trăm giá trị null đối với mọi cột?

Để tìm phần trăm giá trị bị thiếu trong mỗi cột của khung dữ liệu R, chúng ta có thể sử dụng hàm colMeans với is. chức năng na . Điều này sẽ tìm thấy giá trị trung bình của các giá trị bị thiếu trong mỗi cột. Sau đó, chúng ta có thể nhân sản lượng với 100 để có tỷ lệ phần trăm.

Làm cách nào để kiểm tra giá trị null trong cột gấu trúc?

Các phương thức pandas isnull[] và notnull[] được sử dụng để kiểm tra và quản lý các giá trị NULL trong khung dữ liệu.

Bao nhiêu phần trăm giá trị bị thiếu nên được loại bỏ?

Nếu dữ liệu bị thiếu trong hơn 60% quan sát open_in_new, bạn nên loại bỏ dữ liệu nếu biến không đáng kể.

Chủ Đề