Làm cách nào để thay thế các giá trị NaN trong DataFrame của gấu trúc?
mô-đun nhập khẩu Show
tạo khung dữ liệu giả tuổifavorite_colorgradenameWillard Morris20xanh dương88Willard MorrisAl Jennings19đỏ92Al JenningsOmar Mullins22vàng95Omar MullinsSpencer McDaniel21xanh lá cây70Spencer McDanielTạo một số giá trị NaN trong khung dữ liệu agefavorite_colorgradenameWillard MorrisNaNblue88. 0Willard MorrisAl Jennings19. 0red92. 0Al JenningsOmar Mullins22. 0vàng95. 0Omar MullinsSpencer McDaniel21. 0greenNaNSpencer McDanielThay thế các giá trị NaN trong khung dữ liệu (bằng 0 trong trường hợp này) agefavorite_colorgradenameWillard Morris0. 0blue88. 0Willard MorrisAl Jennings19. 0red92. 0Al JenningsOmar Mullins22. 0vàng95. 0Omar MullinsSpencer McDaniel21. 0green0. 0Spencer McDanielTrong quá trình làm sạch dữ liệu pandas, việc thay thế các giá trị bị thiếu đóng vai trò rất quan trọng và trong một số trường hợp, chúng ta phải thay thế các giá trị bị thiếu đó bằng giá trị trung bình của các phần tử chuỗi. Đ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 ví dụ 1Ở đây chúng ta sẽ thấy làm thế nào loạt. phương thức fillna() thay thế giá trị còn thiếu bằng giá trị trung bình # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result) Giải trìnhTrong ví dụ sau, chúng tôi sẽ thay thế các giá trị còn thiếu bằng giá trị trung bình của các phần tử chuỗi. Để làm điều này, chúng tôi áp dụng loạt. mean() làm tham số cho phương thức fillna() đầu raĐầu ra được đưa ra dưới đây - 0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float64 Như bạn có thể thấy, giá trị 52. 0 (giá trị trung bình) được thay thế bằng các giá trị Nan ở các vị trí chỉ mục 1,2,5,7 và 10 ví dụ 2Hãy lấy một ví dụ khác để thay thế các giá trị còn thiếu Nan/NA bằng giá trị trung bình của các phần tử chuỗi # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result) Giải trìnhBan đầu, chúng ta đã tạo đối tượng pandas series với danh sách các số nguyên và giá trị Nan, sau đó gọi phương thức fillna() với giá trị trung bình. Bằng cách sử dụng loạt. mean() chúng tôi đã tính giá trị trung bình và sau đó áp dụng giá trị trung bình đó làm tham số của phương thức fillna() đầu raĐầu ra được đưa ra dưới đây - 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float64 Giá trị trung bình 72. 166667 được thay thế cho các giá trị bị thiếu, các vị trí chỉ mục là 0, 6, 7 và 9 Bạn có thể thay thế giá trị còn thiếu ( 5) trong 6 và 7 bằng bất kỳ giá trị nào bằng cách sử dụng phương pháp 8
Bài viết này mô tả các nội dung sau
Sử dụng 13 nếu bạn muốn điền các giá trị còn thiếu bằng phép nội suy tuyến tính hoặc spline
Để biết thêm thông tin về cách xóa hoặc đếm các giá trị bị thiếu, hãy xem các bài viết sau
Lưu ý rằng không chỉ 5 (Không phải là số) mà cả 15 cũng được coi là giá trị bị thiếu trong pandas
Ví dụ: đọc tệp CSV có giá trị bị thiếu với 16
8nguồn. pandas_nan_fillna. py Liên kết được tài trợ Thay thế tất cả các giá trị bị thiếu bằng cùng một giá trịBằng cách chỉ định giá trị vô hướng làm đối số đầu tiên 17 của 8, tất cả các giá trị bị thiếu sẽ được thay thế bằng giá trị
nguồn. pandas_nan_fillna. py Lưu ý rằng kiểu dữ liệu 19 của một cột số bao gồm 5 là # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)41, vì vậy ngay cả khi bạn thay thế 5 bằng một số nguyên, kiểu dữ liệu vẫn là # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)41. Nếu bạn muốn chuyển đổi nó thành # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)44, hãy sử dụng # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)45
Thay thế các giá trị bị thiếu bằng các giá trị khác nhau cho mỗi cộtBằng cách chỉ định một từ điển # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)46 làm đối số đầu tiên 17 của 8, bạn có thể gán các giá trị khác nhau cho mỗi cộtChỉ định một từ điển của # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)49. Nếu tên cột không được chỉ định, các giá trị bị thiếu trong cột của nó sẽ được giữ lại (= không được thay thế). Nếu 0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float6430 không khớp với tên cột, nó sẽ bị bỏ qua 1nguồn. pandas_nan_fillna. py Bạn cũng có thể chỉ định 12. Các nhãn của 12 tương ứng với khóa của # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)46 # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([69, np.nan, np.nan, 10, 30, 52, 70, np.nan, 54, 79, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)4 nguồn. pandas_nan_fillna. py Thay thế các giá trị bị thiếu bằng giá trị trung bình, trung bình, chế độ, v.v. cho mỗi cộtGiá trị trung bình của mỗi cột có thể được tính bằng phương pháp 0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float6434. 12 được trả lại. 5 bị loại trừ, nhưng kết quả cho một cột có tất cả các phần tử là 5 là 5
0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float643 nguồn. pandas_nan_fillna. py Nếu bạn chỉ định 12 này làm đối số đầu tiên 17 của 8, các giá trị còn thiếu của cột tương ứng sẽ được thay thế bằng giá trị trung bình# importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)8 nguồn. pandas_nan_fillna. py Tương tự, nếu bạn muốn thay thế các giá trị bị thiếu bằng trung vị, hãy sử dụng phương thức # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)82. Nếu số lượng phần tử là số chẵn, giá trị trung bình của hai giá trị trung bình được trả về
0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float640 nguồn. pandas_nan_fillna. py Chế độ có thể thu được bằng phương pháp # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)83. Vì # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)83 trả về 6, hàng đầu tiên được truy xuất là 12 bởi # importing pandas package import pandas as pd import numpy as np # create a series s = pd.Series([np.nan, 49, 45, 47, 99, 99, np.nan, np.nan, 94, np.nan]) print(s) # replace Missing values with an average value result = s.fillna(s.mean()) print('Result:') print(result)87 trong ví dụ này
0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float646 nguồn. pandas_nan_fillna. py Trong các ví dụ này, không có vấn đề gì, nhưng các phương thức như 0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float6434 có thể trả về các giá trị không mong muốn vì chúng cố gắng vận hành không chỉ các cột số mà cả các loại cột khác theo mặc định Trong 0 69.0 1 NaN 2 NaN 3 10.0 4 30.0 5 52.0 6 70.0 7 NaN 8 54.0 9 79.0 10 NaN dtype: float64 Result: 0 69.0 1 52.0 2 52.0 3 10.0 4 30.0 5 52.0 6 70.0 7 52.0 8 54.0 9 79.0 10 52.0 dtype: float6434, v.v., nếu đối số 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6400 được đặt thành 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6401, thì chỉ các cột số được xử lý. Lưu ý rằng các cột loại 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6402 được coi là 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6403 và 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6404 ngay cả khi 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6405 Liên kết được tài trợ Thay thế các giá trị bị thiếu bằng các giá trị hợp lệ trước đó/tiếp theo. print(df.fillna(0)) # name age state point other # 0 Alice 24.0 NY 0.0 0.0 # 1 0 0.0 0 0.0 0.0 # 2 Charlie 0.0 CA 0.0 0.0 # 3 Dave 68.0 TX 70.0 0.0 # 4 Ellen 0.0 CA 88.0 0.0 # 5 Frank 30.0 0 0.0 0.0 9, raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'], 'age': [20, 19, 22, 21], 'favorite_color': ['blue', 'red', 'yellow', "green"], 'grade': [88, 92, 95, 70]} df = pd.DataFrame(raw_data, index = ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel']) df10Đối số 9 của 8 có thể được sử dụng để thay thế các giá trị bị thiếu bằng các giá trị hợp lệ trước đó/tiếp theoNếu 9 được đặt thành 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6461 hoặc 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6462, các giá trị bị thiếu sẽ được thay thế bằng các giá trị hợp lệ trước đó (= điền về phía trước) và nếu 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6463 hoặc 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6464, được thay thế bằng các giá trị hợp lệ tiếp theo (= điền vào phía sau) 4nguồn. pandas_nan_fillna. py Nếu chỉ định 9, thì có thể sử dụng 10 để chỉ định số lần thay thế liên tiếp tối đa 7nguồn. pandas_nan_fillna. py Nó có thể không được sử dụng thường xuyên, nhưng nếu đối số 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6467 được đặt thành 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6468 hoặc 0 NaN 1 49.0 2 45.0 3 47.0 4 99.0 5 99.0 6 NaN 7 NaN 8 94.0 9 NaN dtype: float64 Result: 0 72.166667 1 49.000000 2 45.000000 3 47.000000 4 99.000000 5 99.000000 6 72.166667 7 72.166667 8 94.000000 9 72.166667 dtype: float6469, các giá trị bị thiếu sẽ được thay thế bằng các giá trị bên trái và bên phải 0nguồn. pandas_nan_fillna. py Các phương thức tương ứng với đối số 9 được cung cấp riêng
41 và 42 tương đương với 43, và 44 và 45 tương đương với 46. Bạn có thể chỉ định 10 1nguồn. pandas_nan_fillna. py vận hành tại chỗ. raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'], 'age': [20, 19, 22, 21], 'favorite_color': ['blue', 'red', 'yellow', "green"], 'grade': [88, 92, 95, 70]} df = pd.DataFrame(raw_data, index = ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel']) df11Như đã trình bày trong các ví dụ trên, theo mặc định, một đối tượng mới được trả về và đối tượng ban đầu không bị thay đổi, nhưng nếu 49, đối tượng ban đầu sẽ được cập nhật
Làm cách nào để thay thế NaN bằng các giá trị trong gấu trúc?Các bước thay thế giá trị NaN. . Đối với một cột sử dụng gấu trúc. df['Cột khung dữ liệu'] = df['Cột khung dữ liệu']. điền(0) Đối với một cột sử dụng numpy. df['Cột khung dữ liệu'] = df['Cột khung dữ liệu']. thay thế (np. nan, 0) Đối với toàn bộ DataFrame sử dụng gấu trúc. df. điền(0) Đối với toàn bộ DataFrame bằng cách sử dụng numpy. df. thay thế (np. nan, 0) Làm cách nào để xóa các giá trị NaN khỏi DataFrame của gấu trúc?Bằng cách sử dụng phương thức dropna() bạn có thể thả các hàng có giá trị NaN (Không phải là Số) và Không có từ DataFrame của gấu trúc. Lưu ý rằng theo mặc định, nó trả về bản sao của DataFrame sau khi xóa hàng. Nếu bạn muốn xóa khỏi DataFrame hiện tại, bạn nên sử dụng inplace=True.
Làm cách nào để thay thế các giá trị NaN thành 0 trong gấu trúc?Thay thế các giá trị NaN bằng số 0 trong Khung dữ liệu Pandas . (1) Đối với một cột sử dụng Pandas. df['Cột khung dữ liệu'] = df['Cột khung dữ liệu']. điền(0) (2) Đối với một cột sử dụng NumPy. df['Cột khung dữ liệu'] = df['Cột khung dữ liệu']. thay thế (np. nan, 0) (3) Đối với toàn bộ Khung dữ liệu bằng Pandas. df. điền(0) Làm cách nào để thay thế các giá trị NaN trong gấu trúc bằng chuỗi?Chúng ta có thể thay thế NaN bằng một chuỗi trống bằng cách sử dụng df. hàm thay thế() . Hàm này sẽ thay thế một chuỗi rỗng thay cho giá trị NaN. |