Fillna là gì

Thiếu dữ liệu luôn là vấn đề trong các tình huống thực tế. Các lĩnh vực như máy học và khai thác dữ liệu phải đối mặt với các vấn đề nghiêm trọng về độ chính xác của các dự đoán mô hình của họ do chất lượng dữ liệu kém do các giá trị bị thiếu. Trong những lĩnh vực này, việc xử lý giá trị còn thiếu là trọng tâm chính để làm cho mô hình của họ chính xác và mang tính hợp lý hơn.

1. Khi nào và Tại sao Dữ liệu bị Thiếu?

Tiến hành xem xét cuộc khảo sát trực tuyến của một sản phẩm. Nhiều khi, mọi người không chia sẻ tất cả các thông tin liên quan đến họ. Ít người chia sẻ kinh nghiệm , họ đã sử dụng sản phẩm trong bao lâu, trải nghiệm của họ nhưng không chia sẻ thông tin liên hệ . Do đó, theo một cách nào đó hay cách khác, một phần dữ liệu luôn bị thiếu và điều này rất phổ biến trong thời gian thực.

Bây giờ chúng ta hãy xem cách chúng ta có thể xử lý các giá trị bị thiếu [chẳng hạn như NA hoặc NaN] bằng cách sử dụng Pandas.

# import the pandas library import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df
one two three a 0.077988 0.476149 0.965836 b NaN NaN NaN c -0.390208 -0.551605 -2.301950 d NaN NaN NaN e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g NaN NaN NaN h 0.085100 0.532791 0.887415

Sử dụng reindexing, đã tạo một DataFrame các giá trị bị thiếu. Trong đầu ra, NaN có nghĩa là Không phải số.

Kiểm tra các giá trị bị thiếu :

Để giúp phát hiện các giá trị bị thiếu dễ dàng hơn [và trên các kiểu mảng khác nhau], Pandas cung cấp các hàm isnull []notnull [], cũng là các phương thức thuộc Series và DataFrame

import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df['one'].isnull[]
a False b True c False d True e False f False g True h False Name: one, dtype: bool
import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df['one'].notnull[]
a True b False c True d False e True f True g False h True Name: one, dtype: bool

Các phép tính thiếu dữ liệu

  • Khi tổng hợp dữ liệu, NA sẽ được coi là Zero
  • Nếu dữ liệu đều là NA thì kết quả sẽ là NA
import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df['one'].sum[]
import pandas as pd import numpy as np df = pd.DataFrame[index=[0,1,2,3,4,5],columns=['one','two']] print df['one'].sum[]

2.Làm sạch / lấp đầy dữ liệu bị thiếu :

Pandas cung cấp nhiều phương pháp khác nhau để làm sạch các giá trị bị thiếu. Hàm fillna có thể điền vào các giá trị NA với dữ liệu không phải null theo một số cách, ta sẽ minh họa trong các phần sau.

a.Thay thế NaN bằng Giá trị vô hướng

import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[3, 3], index=['a', 'c', 'e'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c']] print df print ["NaN replaced with '0':"] print df.fillna[0]
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN replaced with '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580

Ở đây, chúng ta đang điền giá trị bằng 0; thay vào đó chúng ta cũng có thể điền vào bất kỳ giá trị nào khác.

b. Điền NA Forward và Backward

Sử dụng các khái niệm fill được thảo luận trong Bài ReIndexing, ta sẽ điền các giá trị còn thiếu.
  • pad/fill :Fill methods Forward
  • bfill/backfill :Fill methods Backward
import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df.fillna[method='pad']
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df.fillna[method='backfill']
one two three a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415

3.Bỏ các giá trị bị thiếu [ Drop ] :

Nếu bạn chỉ muốn loại bỏ các giá trị bị thiếu, sử dụng hàm dropna cùng với đối số trục. Theo mặc định, axis = 0, tức là dọc theo hàng, có nghĩa là nếu bất kỳ giá trị nào trong một hàng là NA thì toàn bộ hàng sẽ bị loại trừ.

import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df.dropna[]
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame[np.random.randn[5, 3], index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']] df = df.reindex[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']] print df.dropna[axis=1]
Empty DataFrame Columns: [ ] Index: [a, b, c, d, e, f, g, h]

4.Thay thế các giá trị chung Hoặc giá trị bị thiếu

Nhiều lần, ta phải thay thế một giá trị chung bằng một giá trị cụ thể nào đó. Sử dụng phương pháp thay thế.

Thay thế NA bằng một giá trị vô hướng bằng hàm fillna [].

import pandas as pd import numpy as np df = pd.DataFrame[{'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}] print df.replace[{1000:10,2000:60}]
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
import pandas as pd import numpy as np df = pd.DataFrame[{'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}] print df.replace[{1000:10,2000:60}]
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60

Video liên quan

Chủ Đề