Làm cách nào để thay thế các giá trị bị thiếu bằng trung vị trong gấu trúc?

Xử lý dữ liệu bị thiếu là một phần thiết yếu của bất kỳ quy trình khoa học dữ liệu nào. Các phương pháp phổ biến được sử dụng để xử lý dữ liệu bị thiếu bao gồm [a] bỏ qua dữ liệu bị thiếu, [b] loại bỏ các bản ghi có dữ liệu bị thiếu hoặc [c] điền dữ liệu bị thiếu. Trong bài viết này, chúng ta sẽ xem xét các phương pháp khác nhau để điền dữ liệu còn thiếu vào thư viện Pandas bằng bộ dữ liệu đồ chơi chứa giá trái cây trong 4 ngày vào tháng 1 năm 2021

Hãy tạo bộ dữ liệu đồ chơi của chúng tôi

df = pd.DataFrame[{'date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04','2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'], 'fruit':['apple', 'apple', 'apple', 'apple', 'mango', 'mango', 'mango', 'mango'], 'price': [0.80, None, None, 1.20, None, 2.10, 2.00, 1.80]}]
df['date'] = pd.to_datetime[df['date']]

Trong tập dữ liệu này có 4 bản ghi bị thiếu giá trị được biểu thị bằng “NaN” và giá táo thường thấp hơn giá xoài

Hình ảnh của AuthorMethods

Điền vào giá trị không đổi

Hãy lấp đầy các giá còn thiếu với giá do người dùng xác định là 0. 85. Tất cả các giá trị còn thiếu trong cột giá sẽ được điền bằng cùng một giá trị

df['price'].fillna[value = 0.85, inplace = True]

Hình ảnh của tác giả

Điền vào giá trị trung bình / trung bình của cột

Chúng tôi có thể điền giá còn thiếu với giá trung bình hoặc giá trung bình của toàn bộ cột

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
0 và
# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
1 trả về giá trị trung bình [1. 975] và trung bình [2. 0] giá tương ứng. Phương pháp
# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
2 gán giá còn thiếu với giá trị trung bình hoặc giá trị trung bình đã cho

Trái. giá bị thiếu được gán với giá trị trung bình. Đúng. giá bị thiếu được gán với trung bình. Hình ảnh của tác giả

Những mức giá này có vẻ quá cao so với giá táo và quá thấp so với giá xoài, do đó chúng ta có thể không muốn quy giá táo với giá trung bình [hoặc trung bình] của tất cả các loại trái cây. Thay vào đó, chúng ta có thể quy giá táo bị thiếu với giá trung bình [hoặc trung vị] chỉ của táo và làm tương tự với xoài. Điều này đưa chúng ta đến phương pháp tiếp theo để lấp đầy các giá trị còn thiếu bằng giá trị trung bình [hoặc trung vị] trong một nhóm cụ thể

Điền vào giá trị trung bình / Median của nhóm

Chúng tôi có thể điền vào các giá trị còn thiếu bằng cách sử dụng số liệu thống kê cấp nhóm theo cách sau

# mean
df['price'].fillna[df.groupby['fruit']['price'].transform['mean'], inplace = True]
# median
df['price'].fillna[df.groupby['fruit']['price'].transform['median'], inplace = True]

Hãy chia đoạn mã trên thành hai bước

Bước 1. Tính giá trung bình cho mỗi loại trái cây và trả về một chuỗi có cùng số hàng như DataFrame ban đầu. Giá trung bình của táo và xoài là 1. 00 và 2. 95 tương ứng

df.groupby['fruit']['price'].transform['mean']

Bước 2. Điền vào các giá trị còn thiếu dựa trên đầu ra của bước 1

Hình ảnh của tác giả

Chuyển tiếp Điền

Điền chuyển tiếp, còn được gọi là viết tắt là "điền", truyền quan sát hợp lệ cuối cùng về phía trước dọc theo trục đã chọn của Khung dữ liệu [xuống dưới cột trong ví dụ của chúng tôi]

________số 8

Hình ảnh của tác giả

Chúng ta có thể giới hạn số hàng mà quan sát hợp lệ cuối cùng được lan truyền bằng cách sử dụng đối số

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
3. Ví dụ dưới đây cho thấy việc lan truyền chỉ giới hạn ở 1 bước sau lần quan sát hợp lệ cuối cùng. Giá bị thiếu cho quả táo vào ngày 2021-01-03 không được điền vì nó là 2 bước sau lần quan sát hợp lệ cuối cùng

df['price'].fillna[value = 0.85, inplace = True]
0

Hình ảnh của tác giả

Điền trước thay thế giá còn thiếu cho xoài vào năm 2020–01–01 bằng giá táo vào năm 2021–01–04. Điều này không có ý nghĩa gì vì nó không phải là sự so sánh táo với táo [không có ý định chơi chữ]. Do đó, chúng tôi có thể muốn áp dụng điền chuyển tiếp riêng cho từng loại trái cây. Chúng ta có thể làm như vậy bằng cách sử dụng phương thức điền trước với pandas groupby

Chuyển tiếp Điền trong Nhóm

Điền chuyển tiếp có thể được sử dụng cùng với groupby để thực hiện điền chuyển tiếp trong các nhóm cụ thể

Hình ảnh của Tác giả
df['price'].fillna[value = 0.85, inplace = True]
1

Lưu ý rằng giá xoài bị thiếu vào năm 2021–01–01 không được lấp đầy bởi giá táo vào năm 2021–01–04 hiện tại vì táo và xoài hiện được coi là các nhóm khác nhau. Tương tự như ví dụ trước, chúng ta cũng có thể đặt tham số

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
3 để giới hạn lan truyền ffill

df['price'].fillna[value = 0.85, inplace = True]
3

Hình ảnh của tác giả

điền lại

Điền ngược còn được gọi là “bfill” viết tắt là ngược lại với điền trước. Quan sát hợp lệ đầu tiên sau khi giá trị “NaN” được xác định và lan truyền ngược dọc theo trục đã chọn [lên trên cột trong ví dụ của chúng tôi]

df['price'].fillna[value = 0.85, inplace = True]
4

Hình ảnh của tác giả

Tương tự, chúng ta cũng có thể giới hạn số hàng mà quan sát hợp lệ được lan truyền bằng cách sử dụng tham số

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
3

df['price'].fillna[value = 0.85, inplace = True]
0

Điền ngược trong các nhóm

Tương tự như điền về phía trước, chúng tôi cũng có thể thực hiện điền ngược chỉ trong các nhóm cụ thể và hạn chế sự lan truyền của nó

df['price'].fillna[value = 0.85, inplace = True]
1

Kết hợp FFill và BFill

Chúng ta cũng có thể điền vào một cột bằng điền trước, sau đó điền ngược lại thông qua chuỗi phương thức

df['price'].fillna[value = 0.85, inplace = True]
2

Hình ảnh của tác giả

Hãy lưu ý rằng thứ tự của các vấn đề

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
6 và
# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
7. Nếu chúng ta hoán đổi thứ tự, điền ngược sẽ được thực hiện trước, sau đó điền tiếp, dẫn đến một kết quả khác

df['price'].fillna[value = 0.85, inplace = True]
3

Hình ảnh của tác giả

nội suy

Nội suy là một phương pháp ước tính [các] giá trị của [các] điểm dữ liệu mới nằm giữa một dải các điểm dữ liệu rời rạc đã biết. Chúng ta có thể áp dụng phép nội suy tuyến tính với Pandas theo cách sau

df['price'].fillna[value = 0.85, inplace = True]
4

Nội suy tuyến tính giả định rằng các giá trị cách đều nhau. Các giá trị bị thiếu cho apple vào 2021–01–02 và 2021–01–03 được điền bằng 0. 933 và 1. 067 nơi giá đang tăng trong khoảng thời gian 0. 133

Hình ảnh của tác giả

Sử dụng phép nội suy tuyến tính theo cách này để điền vào giá xoài còn thiếu vào năm 2021–01–01 không có ý nghĩa vì chúng tôi đang thực hiện phép nội suy dựa trên giá táo vào năm 2021–01–04 và giá xoài vào năm 2021–01–02. Hãy thử thực hiện phép nội suy riêng cho từng loại trái cây

Nội suy trong Nhóm

Chúng ta có thể thực hiện nội suy trong các nhóm cụ thể theo cách sau

df['price'].fillna[value = 0.85, inplace = True]
5

Giá xoài vào ngày 2021–01–01 là “Nan” do không có đủ điểm dữ liệu để thực hiện nội suy. Nội suy tuyến tính yêu cầu ít nhất 2 điểm dữ liệu đã biết, tuy nhiên không có điểm dữ liệu nào cho xoài trước năm 2021–01–01

Hình ảnh của tác giả

Giả sử rằng giá của xoài là như nhau vào năm 2021–01–01 và 2021–01–02, chúng ta có thể điền giá còn thiếu bằng cách điền ngược. Hãy thực hiện cả nội suy và điền ngược theo trình tự bằng cách xâu chuỗi cả hai phương thức lại với nhau

df['price'].fillna[value = 0.85, inplace = True]
6

Hình ảnh của tác giả

Điền giá trị dựa trên điều kiện

Có thể có trường hợp chúng tôi muốn xác định cách điền các giá trị bị thiếu dựa trên các giá trị trong các cột khác. Ví dụ, giá trái cây có thể đắt hơn vào cuối tuần so với các ngày trong tuần. Vì vậy, chúng tôi muốn điền giá còn thiếu theo cách sau

Hình ảnh của tác giả

Trước tiên, chúng ta sẽ cần xác định ngày nào là cuối tuần và ngày trong tuần bằng cách tạo một cột boolean trong đó

# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
8 biểu thị các ngày trong tuần và
# mean
df['price'].fillna[value = df.price.mean[], inplace = True]
# median
df['price'].fillna[value = df.price.median[], inplace = True]
9 biểu thị các ngày cuối tuần

df['price'].fillna[value = 0.85, inplace = True]
7

Sau đó, chúng tôi xác định giá trung bình cho mỗi loại trái cây

df['price'].fillna[value = 0.85, inplace = True]
8

Cuối cùng, chúng tôi điền vào các giá trị còn thiếu dựa trên các điều kiện đã cho pandas ____ phương pháp

# mean
df['price'].fillna[df.groupby['fruit']['price'].transform['mean'], inplace = True]
# median
df['price'].fillna[df.groupby['fruit']['price'].transform['median'], inplace = True]
0

df['price'].fillna[value = 0.85, inplace = True]
9

Hình ảnh của Tác giảKết luận

Trong bài viết này, chúng tôi đã kiểm tra các phương pháp sau đây để điền các giá trị còn thiếu bằng cách sử dụng Pandas

  • phi lê
  • Chuyển tiếp Điền
  • điền lại
  • nội suy

Việc lựa chọn phương pháp điền phụ thuộc vào các giả định và bối cảnh của vấn đề. Ví dụ: điền các giá trị còn thiếu của xoài bằng giá trung bình của táo và xoài có thể không phải là ý kiến ​​hay vì táo và xoài có giá khá khác nhau trong bộ dữ liệu đồ chơi của chúng tôi

Chúng tôi cũng xem cách sử dụng từng phương pháp này cùng với phương pháp pandas

# mean
df['price'].fillna[df.groupby['fruit']['price'].transform['mean'], inplace = True]
# median
df['price'].fillna[df.groupby['fruit']['price'].transform['median'], inplace = True]
1 để điền các giá trị còn thiếu cho từng nhóm riêng biệt

Làm cách nào để thay thế các giá trị bị thiếu trong gấu trúc?

Bây giờ, hãy xem cách bạn có thể điền vào các giá trị còn thiếu này bằng các phương thức có sẵn khác nhau trong pandas. .
Sử dụng Phương thức fillna[]. Hàm fillna[] lặp qua tập dữ liệu của bạn và điền vào tất cả các hàng trống với một giá trị được chỉ định. .
Phương thức thay thế[]. .
Điền dữ liệu còn thiếu với nội suy []

Tốt hơn là thay thế các giá trị bị thiếu bằng giá trị trung bình hoặc trung vị?

Bạn có thể sử dụng giá trị trung bình để thay thế các giá trị còn thiếu trong trường hợp phân phối dữ liệu đối xứng . Cân nhắc sử dụng trung vị hoặc chế độ có phân phối dữ liệu sai lệch. Phương thức Pandas Dataframe trong Python chẳng hạn như fillna có thể được sử dụng để thay thế các giá trị bị thiếu.

Làm cách nào để gán các giá trị bị thiếu với giá trị trung bình trong gấu trúc?

Bước 1 - Nhập thư viện. nhập gấu trúc dưới dạng pd nhập numpy dưới dạng np từ sklearn. tiền xử lý nhập khẩu Imputer. .
Bước 2 - Thiết lập dữ liệu. Trước tiên, chúng tôi đã tạo một DataFrame trống, sau đó tạo các cột C0 và C1 với các giá trị. .
Bước 3 - Sử dụng Imputer để điền các giá trị nun bằng Giá trị trung bình

Làm cách nào để thay thế các giá trị bị thiếu bằng NaN trong gấu trúc?

Thay thế các giá trị bị thiếu .
giá trị. giá trị sử dụng để thay thế NaN
phương pháp. phương pháp sử dụng để thay thế NaN. method='ffill' thực hiện thay thế về phía trước. method='bfill' thực hiện thay thế từ khóa
trục. 0 cho hàng và 1 cho cột
thay thế. Nếu Đúng, thực hiện thao tác tại chỗ và trả về Không có

Chủ Đề