Python xóa hàng trống

Một nhiệm vụ nhỏ để làm sạch dữ liệu hoặc chuẩn bị mô hình máy học là xóa các hàng hoặc cột có dữ liệu trống hoặc giá trị bị thiếu

Ví dụ về xóa hàng

Đây là hai cách nhanh chóng để làm điều đó

  1. Sử dụng dropna[] mà khi bạn không quan tâm hàng nào, chỉ cần thả chúng
df.dropna[axis='rows']

2. Sử dụng drop[] với danh sách số hàng. Đôi khi bạn quan tâm hàng nào. Giữ một bản sao của số hàng có NaN. Vì vậy, trước tiên chúng tôi xác định chức năng trợ giúp trống_rows[] tùy chỉnh

def get_empty_rows[df]:
indices = []
for i, s in df.iterrows[]:
for v in s.values:
if str[v].lower[] == 'nan':
if i not in indices:
indices.append[i]

return indices

Nếu khả năng đọc thực sự không phải là điều bạn quan tâm, tôi cũng tạo một chức năng lót cho bạn như bên dưới. [Hãy nhớ 'Số lượng khả năng đọc' từ Zen? Tôi có thể nói rằng chức năng trợ giúp nhanh cũng được miễn là bạn ghi lại đúng cách]

def get_empty_rows[dataset]:
# Nested 'for' loop and unique value list of 'set'
return list[set[[i for i, s in dataset.iterrows[] for v in s.values if str[v] == 'nan']]]

[nếu tập dữ liệu là hugh, việc chạy trong các vòng lặp iterrows[] có thể gây ra vấn đề về hiệu suất. Bạn nên xem xét tập hợp con thành đoạn rồi tiếp tục và hợp nhất kết quả cuối cùng]

Sau đó, chúng tôi sử dụng drop[] để lấy danh sách số hàng cần xóa. Chúng tôi giữ một bản sao của danh sách, trong trường hợp chúng tôi muốn kiểm tra nó sau hoặc thay đổi nó theo cách thủ công. Ví dụ: một số hàng vẫn có giá trị ngay cả khi chúng bị thiếu một số dữ liệu. [Luôn tùy từng trường hợp, tùy thuộc vào logic kinh doanh của bạn]

list_of_empty_rows = get_empty_rows[df]
df.drop[list_of_empty_rows]

Một cách 'gấu trúc' hơn là tập hợp con dựa trên điều kiện đó, sau đó lấy danh sách chỉ mục của tập hợp con đó. . e. g

index_list = df[df['price'] < 20].indexindex_list = df[df[‘name’] == np.nan].indexindex_list = df[df['email'].isnull[]].indexdf.drop[index_list]

Cách tiếp cận này sử dụng tính năng vector hóa numpy. Nó thực sự hoạt động nhanh hơn nhiều so với bước lặp thủ công ở trên. Khuyến khích

Là một phần của quy trình Sắp xếp dữ liệu, chúng tôi thường làm sạch Tập dữ liệu của mình và loại bỏ các quan sát ngoại lai trước khi tiến hành phân tích và trực quan hóa sâu hơn

Trong hướng dẫn hôm nay, chúng ta sẽ tìm hiểu cách sử dụng DataFrame của thư viện Pandas. dropna[] để loại bỏ các hàng chứa các giá trị bị thiếu

Tập dữ liệu mẫu

Chúng tôi sẽ bắt đầu bằng cách nhập các thư viện Pandas và Numpy và tạo một DataFrame rất đơn giản từ một từ điển

import pandas as pd
import numpy as np

employees = {'employee': [ 'John', 'Don', 'Joe'],
             'salary':[110, 120, 190],
             'employer' : [np.nan,'ABC Corp',np.nan]}

my_data = pd.DataFrame[data=employees]
my_data.head[]

Đây là dữ liệu của chúng tôi

Đếm số giá trị còn thiếu

Trước tiên, bạn có thể muốn xác định và đếm các giá trị còn thiếu trong DataFrame của mình. Đây là mã và kết quả

my_data.isna[].sum[]

Kết quả là Chuỗi Pandas chứa số lượng giá trị bị thiếu trong mỗi cột

employee    0
salary      0
employer    2
dtype: int64

Bỏ các hàng có giá trị bị thiếu khỏi Khung dữ liệu Python của chúng tôi

Như đã đề cập trước đây, chúng tôi sẽ sử dụng DataFrame. phương thức dropna[]

Chúng tôi có thể tạo một DataFrame mới chứa các hàng có giá trị không trống

________số 8

Đây là kết quả

Chúng tôi cũng có thể sử dụng tham số inplace=True để duy trì các thay đổi trong DataFrame ban đầu của mình

my_data.dropna[axis=0, inplace=True]

Xóa hàng bằng nan với điều kiện

Điều gì sẽ xảy ra nếu chúng ta muốn loại bỏ các hàng bằng NAN, nhưng chỉ làm điều đó nếu các giá trị trống nằm trong các cột cụ thể?

May mắn thay, chúng ta có thể sử dụng tham số tập hợp con và chuyển các cột có liên quan đến phương thức dropna[]. Đoạn mã sau sẽ tìm kiếm các giá trị trống trên hai cột cụ thể

def get_empty_rows[df]:
indices = []
for i, s in df.iterrows[]:
for v in s.values:
if str[v].lower[] == 'nan':
if i not in indices:
indices.append[i]

return indices
0

Xóa cột bằng NAN

Nếu chúng tôi muốn xóa các cột chứa giá trị NAN, thì chúng tôi sẽ chuyển tham số axis=1 cho dropna[]

def get_empty_rows[df]:
indices = []
for i, s in df.iterrows[]:
for v in s.values:
if str[v].lower[] == 'nan':
if i not in indices:
indices.append[i]

return indices
1

học tiếp theo

Chúng tôi có một số hướng dẫn mà bạn có thể muốn xem xét liên quan đến cài đặt phụ và cắt DataFrames theo các điều kiện nhất định

Chủ Đề