Làm thế nào để bạn điền một giá trị trong python?

Sự khác biệt giữa dữ liệu được tìm thấy trong nhiều hướng dẫn và dữ liệu trong thế giới thực là dữ liệu trong thế giới thực hiếm khi rõ ràng và đồng nhất. Đặc biệt, nhiều bộ dữ liệu thú vị sẽ có một số lượng dữ liệu bị thiếu. Để làm cho vấn đề trở nên phức tạp hơn, các nguồn dữ liệu khác nhau có thể chỉ ra dữ liệu bị thiếu theo những cách khác nhau

Trong phần này, chúng ta sẽ thảo luận về một số cân nhắc chung đối với dữ liệu bị thiếu, thảo luận về cách Pandas chọn để thể hiện dữ liệu đó và trình bày một số công cụ Pandas tích hợp để xử lý dữ liệu bị thiếu trong Python. Ở đây và xuyên suốt cuốn sách, chúng ta sẽ đề cập đến dữ liệu bị thiếu nói chung dưới dạng giá trị null, NaN hoặc NA

Đánh đổi trong các quy ước dữ liệu bị thiếu

Có một số lược đồ đã được phát triển để chỉ ra sự hiện diện của dữ liệu bị thiếu trong bảng hoặc Khung dữ liệu. Nói chung, chúng xoay quanh một trong hai chiến lược. sử dụng mặt nạ biểu thị trên toàn cầu các giá trị bị thiếu hoặc chọn một giá trị trọng điểm cho biết một mục bị thiếu

Trong cách tiếp cận mặt nạ, mặt nạ có thể là một mảng Boolean hoàn toàn riêng biệt hoặc nó có thể liên quan đến việc chiếm đoạt một bit trong biểu diễn dữ liệu để biểu thị cục bộ trạng thái null của một giá trị

Trong cách tiếp cận canh gác, giá trị canh gác có thể là một số quy ước dành riêng cho dữ liệu, chẳng hạn như biểu thị một giá trị số nguyên bị thiếu với -9999 hoặc một số mẫu bit hiếm hoặc nó có thể là một quy ước toàn cầu hơn, chẳng hạn như biểu thị một giá trị dấu phẩy động bị thiếu

Không có cách tiếp cận nào trong số này là không có sự đánh đổi. việc sử dụng một mảng mặt nạ riêng biệt yêu cầu phân bổ một mảng Boolean bổ sung, bổ sung thêm chi phí hoạt động trong cả lưu trữ và tính toán. Giá trị canh gác làm giảm phạm vi giá trị hợp lệ có thể được biểu diễn và có thể yêu cầu logic bổ sung (thường không được tối ưu hóa) trong số học CPU và GPU. Các giá trị đặc biệt phổ biến như NaN không có sẵn cho tất cả các loại dữ liệu

Như trong hầu hết các trường hợp không tồn tại lựa chọn tối ưu chung, các ngôn ngữ và hệ thống khác nhau sử dụng các quy ước khác nhau. Ví dụ: ngôn ngữ R sử dụng các mẫu bit dành riêng trong mỗi loại dữ liệu làm giá trị trọng điểm biểu thị dữ liệu bị thiếu, trong khi hệ thống SciDB sử dụng một byte bổ sung được gắn vào mỗi ô biểu thị trạng thái NA

Thiếu dữ liệu trong Pandas

Cách thức mà Pandas xử lý các giá trị bị thiếu bị hạn chế bởi sự phụ thuộc của nó vào gói NumPy, không có khái niệm tích hợp sẵn về các giá trị NA cho các loại dữ liệu không phải dấu phẩy động

Pandas có thể đã làm theo hướng dẫn của R trong việc chỉ định các mẫu bit cho từng loại dữ liệu riêng lẻ để biểu thị tính không, nhưng cách tiếp cận này hóa ra lại khá khó sử dụng. Trong khi R chứa bốn loại dữ liệu cơ bản, NumPy hỗ trợ nhiều hơn thế này. ví dụ: trong khi R có một loại số nguyên duy nhất, NumPy hỗ trợ mười bốn loại số nguyên cơ bản sau khi bạn tính đến các độ chính xác, chữ ký và độ bền có sẵn của mã hóa. Việc đặt trước một mẫu bit cụ thể trong tất cả các loại NumPy có sẵn sẽ dẫn đến một lượng chi phí khó sử dụng trong các hoạt động khác nhau trong vỏ bọc đặc biệt cho các loại khác nhau, thậm chí có thể yêu cầu một nhánh mới của gói NumPy. Hơn nữa, đối với các loại dữ liệu nhỏ hơn (chẳng hạn như số nguyên 8 bit), việc hy sinh một bit để sử dụng làm mặt nạ sẽ làm giảm đáng kể phạm vi giá trị mà nó có thể biểu thị

NumPy có hỗ trợ cho các mảng được che dấu - nghĩa là các mảng có một mảng mặt nạ Boolean riêng được đính kèm để đánh dấu dữ liệu là "tốt" hoặc "xấu". " Pandas có thể bắt nguồn từ điều này, nhưng chi phí chung cho cả lưu trữ, tính toán và bảo trì mã khiến đó là một lựa chọn kém hấp dẫn

Với những ràng buộc này, Pandas đã chọn sử dụng các lính canh cho dữ liệu bị thiếu và tiếp tục chọn sử dụng hai giá trị null Python đã tồn tại. giá trị dấu phẩy động đặc biệt

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 và đối tượng Python
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7. Sự lựa chọn này có một số tác dụng phụ, như chúng ta sẽ thấy, nhưng trong thực tế cuối cùng lại là một sự thỏa hiệp tốt trong hầu hết các trường hợp quan tâm

dtype = object 10 loops, best of 3: 78.2 ms per loop dtype = int 100 loops, best of 3: 3.06 ms per loop 7. Pythonic thiếu dữ liệu

Giá trị sentinel đầu tiên được Pandas sử dụng là

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7, một đối tượng đơn Python thường được sử dụng cho dữ liệu bị thiếu trong mã Python. Bởi vì nó là một đối tượng Python, nên không thể sử dụng
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 trong bất kỳ mảng NumPy/Pandas tùy ý nào, nhưng chỉ trong các mảng có kiểu dữ liệu
vals1.sum()
1 (i. e. , mảng các đối tượng Python)

Trong 1]

import numpy as np
import pandas as pd

Trong 2]

vals1 = np.array([1, None, 3, 4])
vals1

Ra[2]

________số 8_______

vals1.sum()
2 này có nghĩa là cách biểu diễn kiểu phổ biến nhất mà NumPy có thể suy luận về nội dung của mảng là chúng là các đối tượng Python. Mặc dù loại mảng đối tượng này hữu ích cho một số mục đích, nhưng mọi thao tác trên dữ liệu sẽ được thực hiện ở cấp Python, với chi phí cao hơn nhiều so với các thao tác nhanh thông thường được thấy đối với mảng có kiểu gốc

Trong 3]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

Việc sử dụng các đối tượng Python trong một mảng cũng có nghĩa là nếu bạn thực hiện các phép tổng hợp như

vals1.sum()
3 hoặc
vals1.sum()
4 trên một mảng có giá trị
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7, thông thường bạn sẽ gặp lỗi

Trong [4]

vals1.sum()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

Điều này phản ánh thực tế là phép cộng giữa một số nguyên và

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 là không xác định

dtype = object 10 loops, best of 3: 78.2 ms per loop dtype = int 100 loops, best of 3: 3.06 ms per loop 6. Thiếu dữ liệu số

Biểu diễn dữ liệu còn thiếu khác,

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 (từ viết tắt của Not a Number), thì khác;

Trong [5]

vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype

Ra[5]

dtype('float64')

Lưu ý rằng NumPy đã chọn loại dấu phẩy động riêng cho mảng này. điều này có nghĩa là không giống như mảng đối tượng trước đó, mảng này hỗ trợ các thao tác nhanh được đưa vào mã được biên dịch. Bạn nên lưu ý rằng

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 hơi giống một loại vi-rút dữ liệu–nó lây nhiễm bất kỳ đối tượng nào khác mà nó chạm vào. Bất kể phép toán nào, kết quả của phép tính với
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 sẽ là một
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 khác

Trong [6]

1 + np.nan

Ra[6]

vals1 = np.array([1, None, 3, 4])
vals1
0

Trong [7]

vals1 = np.array([1, None, 3, 4])
vals1
1

Ra[7]

vals1 = np.array([1, None, 3, 4])
vals1
0

Lưu ý rằng điều này có nghĩa là tổng hợp trên các giá trị được xác định rõ (i. e. , chúng không gây ra lỗi) nhưng không phải lúc nào cũng hữu ích

Trong [8]

vals1 = np.array([1, None, 3, 4])
vals1
3

Ra[8]

vals1 = np.array([1, None, 3, 4])
vals1
4

NumPy cung cấp một số tập hợp đặc biệt sẽ bỏ qua các giá trị bị thiếu này

Trong [9]

vals1 = np.array([1, None, 3, 4])
vals1
5

Ra[9]

vals1 = np.array([1, None, 3, 4])
vals1
6

Hãy nhớ rằng

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 cụ thể là một giá trị dấu phẩy động;

NaN và Không có gì trong Pandas

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 và
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 đều có vị trí của chúng và Pandas được xây dựng để xử lý hai trong số chúng gần như hoán đổi cho nhau, chuyển đổi giữa chúng khi thích hợp

Trong [10]

vals1 = np.array([1, None, 3, 4])
vals1
7

Ra[10]

vals1 = np.array([1, None, 3, 4])
vals1
8

Đối với các loại không có sẵn giá trị trọng điểm, Pandas sẽ tự động chuyển kiểu khi có giá trị NA. Ví dụ: nếu chúng ta đặt một giá trị trong một mảng số nguyên thành

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5, giá trị đó sẽ tự động được cập nhật thành loại dấu phẩy động để phù hợp với NA

Trong [11]

vals1 = np.array([1, None, 3, 4])
vals1
9

Ra[11]

array([1, None, 3, 4], dtype=object)
0

Trong [12]

array([1, None, 3, 4], dtype=object)
1

Ra[12]

array([1, None, 3, 4], dtype=object)
2

Lưu ý rằng ngoài việc truyền mảng số nguyên thành dấu phẩy động, Pandas còn tự động chuyển đổi giá trị

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 thành giá trị
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6. (Xin lưu ý rằng có đề xuất thêm số nguyên gốc NA vào Pandas trong tương lai; tại thời điểm viết bài này, nó chưa được đưa vào)

Mặc dù loại phép thuật này có thể cảm thấy hơi khó hiểu so với cách tiếp cận thống nhất hơn đối với các giá trị NA trong các ngôn ngữ dành riêng cho miền như R, nhưng phương pháp truyền / truyền của Pandas hoạt động khá tốt trong thực tế và theo kinh nghiệm của tôi hiếm khi gây ra sự cố

Bảng sau đây liệt kê các quy ước upcasting trong Pandas khi các giá trị NA được giới thiệu

TypeclassChuyển đổi khi lưu trữ giá trị NAsNA Sentinel
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
8Không thay đổi
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5
vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
0Không thay đổi
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 hoặc
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5
vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
3Truyền tới
vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5
vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
6Truyền tới
vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
0
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 hoặc
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-749fd8ae6030> in <module>()
----> 1 vals1.sum()

/Users/jakevdp/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims)
     30 
     31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32     return umr_sum(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
5

Hãy nhớ rằng trong Pandas, dữ liệu chuỗi luôn được lưu trữ với kiểu dữ liệu

vals2 = np.array([1, np.nan, 3, 4]) 
vals2.dtype
0

Hoạt động trên các giá trị Null

Như chúng ta đã thấy, Pandas coi

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

7 và
dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

6 về cơ bản có thể hoán đổi cho nhau để chỉ ra các giá trị bị thiếu hoặc không có giá trị. Để tạo thuận lợi cho quy ước này, có một số phương pháp hữu ích để phát hiện, loại bỏ và thay thế các giá trị null trong cấu trúc dữ liệu Pandas. họ đang

  • dtype('float64')
    3. Tạo mặt nạ boolean cho biết các giá trị bị thiếu
  • dtype('float64')
    4. Đối diện với
    dtype('float64')
    3
  • dtype('float64')
    6. Trả về phiên bản đã lọc của dữ liệu
  • dtype('float64')
    7. Trả về một bản sao của dữ liệu với các giá trị bị thiếu được điền hoặc gán

Chúng tôi sẽ kết thúc phần này với một cuộc khám phá và trình diễn ngắn gọn về những thói quen này

Phát hiện giá trị null

Cấu trúc dữ liệu gấu trúc có hai phương pháp hữu ích để phát hiện dữ liệu null.

dtype('float64')
3 và
dtype('float64')
4. Một trong hai sẽ trả lại mặt nạ Boolean trên dữ liệu. Ví dụ

Trong [13]

array([1, None, 3, 4], dtype=object)
3

Trong [14]

array([1, None, 3, 4], dtype=object)
4

Ra[14]

array([1, None, 3, 4], dtype=object)
5

Như đã đề cập trong Lựa chọn và lập chỉ mục dữ liệu, mặt nạ Boolean có thể được sử dụng trực tiếp dưới dạng chỉ mục

1 + np.nan
0 hoặc
1 + np.nan
1

Trong [15]

array([1, None, 3, 4], dtype=object)
6

Ra[15]

array([1, None, 3, 4], dtype=object)
7

Các phương pháp

dtype('float64')
3 và
dtype('float64')
4 tạo ra kết quả Boolean tương tự cho
1 + np.nan
1 giây

Giảm giá trị null

Ngoài cách che dấu được sử dụng trước đó, còn có các phương thức tiện lợi,

dtype('float64')
6 (loại bỏ giá trị NA) và
dtype('float64')
7 (điền giá trị NA). Đối với một
1 + np.nan
0, kết quả rất đơn giản

Trong [16]

array([1, None, 3, 4], dtype=object)
8

Ra[16]

array([1, None, 3, 4], dtype=object)
7

Đối với một

1 + np.nan
1, có nhiều lựa chọn hơn. Hãy xem xét điều sau đây
1 + np.nan
1

Trong [17]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
0

Ra[17]

01201. 0NaN212. 03. 052NaN4. 06

Chúng tôi không thể loại bỏ các giá trị đơn lẻ từ

1 + np.nan
1; . Tùy thuộc vào ứng dụng, bạn có thể muốn cái này hay cái kia, vì vậy
dtype('float64')
6 đưa ra một số tùy chọn cho
1 + np.nan
1

Theo mặc định,

dtype('float64')
6 sẽ loại bỏ tất cả các hàng có bất kỳ giá trị null nào

Trong [18]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
1

Hết[18]

01212. 03. 05

Ngoài ra, bạn có thể thả các giá trị NA dọc theo một trục khác;

Trong 19]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
2

Hết[19]

2021526

Nhưng điều này cũng làm giảm một số dữ liệu tốt; . Điều này có thể được chỉ định thông qua các tham số

vals1 = np.array([1, None, 3, 4])
vals1
05 hoặc
vals1 = np.array([1, None, 3, 4])
vals1
06, cho phép kiểm soát tốt số lượng null để cho phép thông qua

Giá trị mặc định là

vals1 = np.array([1, None, 3, 4])
vals1
07, sao cho bất kỳ hàng hoặc cột nào (tùy thuộc vào từ khóa
vals1 = np.array([1, None, 3, 4])
vals1
08) chứa giá trị null sẽ bị loại bỏ. Bạn cũng có thể chỉ định
vals1 = np.array([1, None, 3, 4])
vals1
09, điều này sẽ chỉ loại bỏ các hàng/cột có tất cả các giá trị null

Trong 20]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
3

Hết[20]

012301. 0NaN2NaN12. 03. 05NaN2NaN4. 06NaN

Trong [21]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
4

Hết[21]

01201. 0NaN212. 03. 052NaN4. 06

Để kiểm soát chi tiết hơn, tham số

vals1 = np.array([1, None, 3, 4])
vals1
06 cho phép bạn chỉ định số lượng giá trị khác null tối thiểu cho hàng/cột được giữ

Trong [22]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
5

Hết[22]

012312. 03. 05NaN

Ở đây, hàng đầu tiên và hàng cuối cùng đã bị loại bỏ vì chúng chỉ chứa hai giá trị khác null

Điền giá trị null

Đôi khi, thay vì loại bỏ các giá trị NA, bạn nên thay thế chúng bằng một giá trị hợp lệ. Giá trị này có thể là một số đơn lẻ như số 0 hoặc có thể là một số loại quy nạp hoặc nội suy từ các giá trị tốt. Bạn có thể thực hiện việc này tại chỗ bằng cách sử dụng phương thức

dtype('float64')
3 làm mặt nạ, nhưng vì đây là một hoạt động phổ biến nên Pandas cung cấp phương thức
dtype('float64')
7, phương thức này trả về một bản sao của mảng với các giá trị null được thay thế

Hãy xem xét những điều sau đây

1 + np.nan
0

Trong [23]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
6

Hết[23]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
7

Chúng tôi có thể điền vào các mục NA với một giá trị duy nhất, chẳng hạn như không

Trong [24]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
8

Ra[24]

for dtype in ['object', 'int']:
    print("dtype =", dtype)
    %timeit np.arange(1E6, dtype=dtype).sum()
    print()
9

Chúng tôi có thể chỉ định điền chuyển tiếp để truyền giá trị trước đó về phía trước

Trong [25]

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

0

Hết[25]

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

1

Hoặc chúng ta có thể chỉ định điền ngược để truyền các giá trị tiếp theo về phía sau

Trong [26]

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

2

Hết[26]

dtype = object
10 loops, best of 3: 78.2 ms per loop

dtype = int
100 loops, best of 3: 3.06 ms per loop

3

Đối với các

1 + np.nan
1, các tùy chọn cũng tương tự, nhưng chúng ta cũng có thể chỉ định một
vals1 = np.array([1, None, 3, 4])
vals1
08 để thực hiện điền

Phương thức điền trong Python là gì?

Hàm NumPy fill() trong Python được dùng để điền vào mảng một giá trị vô hướng . Hàm này điền vào các phần tử của một mảng với một giá trị tĩnh từ vị trí bắt đầu được chỉ định đến vị trí kết thúc.

Làm cách nào để điền giá trị NA vào gấu trúc?

Điều này có thể được thực hiện bằng cách sử dụng phương thức fillna() . Hoạt động cơ bản của loạt gấu trúc này. Phương thức fillna() được sử dụng để thay thế các giá trị bị thiếu (Nan hoặc NA) bằng một giá trị được chỉ định. Ban đầu, phương thức xác minh tất cả các giá trị Nan và thay thế chúng bằng giá trị thay thế được chỉ định.

fillna 0 trong Python là gì?

Hàm fillna() được sử dụng để điền các giá trị NA/NaN bằng phương pháp đã chỉ định . Giá trị sử dụng để lấp lỗ (e. g. 0), luân phiên một dict/Series/DataFrame của các giá trị chỉ định giá trị nào sẽ sử dụng cho từng chỉ mục (đối với Sê-ri) hoặc cột (đối với DataFrame). Các giá trị không có trong dict/Series/DataFrame sẽ không được điền.