Hướng dẫn missing data in python - thiếu dữ liệu trong python

Làm sạch dữ liệu (data cleaning) là một công việc tẻ nhạt. Thực tế nó và chuẩn bị dữ liệu là phần tốn thời gian nhất của một dự án khoa học dữ liệu. Theo một nghiên cứu của IBM Data Analytsics thì 80% thời gian quý giá của một nhà khoa học dữ liệu được dành chỉ đơn giản là tìm kiếm, làm sạch và sắp xếp dữ liệu, chỉ còn lại 20% thời gian để thực sự làm phân tích.

Xử lý missing data là một phần quan trọng trong làm sạch dữ liệu. Việc xử lý missing data nhanh chóng, gọn gàng giúp tiết kiệm rất nhiều thời gian cho dự án. Có nhiều công cụ mạnh làm tốt công việc này và một trong số đó là pandas.

Pandas là một thư viện phân tích dữ liệu được sử dụng rộng rãi cho Python. Bạn có thể tham khảo cách cài đặt, khai báo và các thông tin cơ bản về pandas trong bài "Xử lý dữ liệu với Pandas trong Python". Giờ chúng ta hãy tìm hiểu sơ lược về missing data:

Missing data là gì?

Missing data là dữ liệu bị thiếu, được hiển thị như NaN, Nat, Null, N/A, v.v. Missing data xuất hiện do nhiều nguyên nhân như:

  • Người dùng quên điền.
  • Dữ liệu bị mất trong quá trình chuyển thủ công từ cơ sở dữ liệu cũ.
  • Lỗi của chương trình.
  • Thiếu dữ liệu do trùng hợp v.v.

Missing data có thể được phân thành 3 loại: Missing at Random (dữ liệu khuyết ngẫu nhiên), Missing Completely at Random (dữ liệu thiếu hoàn toàn ngẫu nhiên) và Missing Not at Random (dữ liệu khuyết không ngẫu nhiên). 

Missing data trong pandas

Do dữ liệu có nhiều dạng và hình thức nên pandas rất linh hoạt trong việc xử lý missing data. Missing data được đánh dấu mặc định là NaN để tăng tốc độ tính toán và thuận tiện. Tuy nhiên pandas cũng có thể dễ dàng phân biệt missing data vào các loại khác nhau: dấu phẩy động, số nguyên, boolean và đối tượng chung. 

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
6,
   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
7 và
   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
8 (cho loại datetime64[ns]) là các giá trị missing tiêu chuẩn trong Pandas. Loại missing data mới (
   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
9), được giới thiệu trong Pandas 1.0, thể hiện cho missing data kiểu số nguyên.

Ví dụ 1: Các loại missing data: 

import pandas as pd
import numpy as np

# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# Tạo một Series chứa missing data dạng số nguyên
ser_1 = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Thêm Series 1 này vào như một cột DataFrame
df['cột_']= ser_1

# Tạo một Series chứa missing data dạng datetime64[ns]
ser_2 = pd.Series([pd.Timestamp('20200101'), np.nan, '20200401', '20200501', '20200601'])

# Thêm Series 2 này vào như một cột DataFrame
df['cột_NaT']= ser_2

print(df)

Output:

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT

Thao tác với missing data trong pandas

Pandas cho phép bạn thao tác linh hoạt với missing data trong Series, DataFrame như tìm giá trị bị thiếu (missing value), xác định giá trị tồn tại (không bị thiếu), loại bỏ giá trị bị thiếu, chèn giá trị bị thiếu, điền vào giá trị bị thiếu, v.v. Bên dưới mình sẽ trình bày các ví dụ cụ thể cho các thao tác.

Xác định giá trị bị thiếu và giá trị đang tồn tại: isna(), notna()

Ví dụ 2: Xác định giá trị bị thiếu bằng

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
0 và
import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
1

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)

Output:

Kiểm tra isna cho Series
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool
Kiểm tra isna cho DataFrame
   cột_1  cột_2  cột_3  cột_4
0  False  False  False  False
1  False  False   True  False
2  False   True  False  False
3  False  False  False   True
4   True   True  False  False
5  False  False  False   True
6   True  False  False  False

Ví dụ 3: Xác định giá trị tồn tại (existing values) bằng

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
2 và
import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
3

import pandas as pd
import numpy as np

print('Kiểm tra notna cho Series')
# Tạo một Series chứa missing data
ser = pd.Series([1, 2, np.nan, 4])

# Series check notna
notna_Ser = ser.notna()

print(notna_Ser)
''' ----------'''
print('Kiểm tra notna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 10]})


# DataFrame check notna
notna_DF = df.notna()

print(notna_DF)

Output:

Kiểm tra notna cho Series
0     True
1     True
2    False
3     True
dtype: bool
Kiểm tra notna cho DataFrame
   cột_1  cột_2
0   True   True
1   True   True
2   True  False
3   True   True
4  False  False
5   True   True
6  False   True

Xóa giá trị bị thiếu: dropna()

Ví dụ 4: Xóa giá trị thiếu bằng

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
4 và
import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
5

import pandas as pd
import numpy as np

# Series.drop()
print('Series chứa missing data')
ser = pd.Series([1, 2, np.nan, 4])
print(ser)

print('Series đã xóa missing data')
drop_Ser = ser.dropna()
print(drop_Ser)

# DataFrame.drop()
print('DataFrame chứa missing data')
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 10]})
print(df)

print('DataFrame đã xóa missing data')
drop_DF = df.dropna()
print(drop_DF)

Output:

Series chứa missing data
0    1.0
1    2.0
2    NaN
3    4.0
dtype: float64
Series đã xóa missing data
0    1.0
1    2.0
3    4.0
dtype: float64
DataFrame chứa missing data
   cột_1  cột_2
0    0.0    9.1
1    1.0    3.0
2    3.0    NaN
3    4.0   -5.1
4    NaN    NaN
5    5.0    2.0
6    NaN   10.0
DataFrame đã xóa missing data
   cột_1  cột_2
0    0.0    9.1
1    1.0    3.0
3    4.0   -5.1
5    5.0    2.0

Điền vào giá trị thiếu: fillna()

Sử dụng

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
6 bạn có thể chèn vào các giá trị bị thiếu bằng dữ liệu khác theo một số cách:

Ví dụ 5: Thay thế giá trị bị thiếu bằng một giá trị vô hướng (scalar value)

import pandas as pd
import numpy as np

# Series.fill()
print('Series chứa missing data')
ser = pd.Series([pd.Timestamp('20200101'), np.nan, '20200401'])
print(ser)

print('Series đã thay missing data bằng giá trị vô hướng "1110" ')
fill_Ser = ser.fillna(1110)
print(fill_Ser)

# DataFrame.fill()
print('DataFrame chứa missing data')
df = pd.DataFrame({'cột_1':[0, np.nan, 5, np.nan],
                   'cột_2':[9.1, np.nan, None, 10]})
print(df)

print('DataFrame đã thay missing data bằng giá trị vô hướng "AnhKiet"')
fill_DF = df.fillna('AnhKiet')
print(fill_DF)

Output:

Series chứa missing data
0   2020-01-01
1          NaT
2   2020-04-01
dtype: datetime64[ns]
Series đã thay missing data bằng giá trị vô hướng "1110" 
0    2020-01-01 00:00:00
1                   1110
2    2020-04-01 00:00:00
dtype: object
DataFrame chứa missing data
   cột_1  cột_2
0    0.0    9.1
1    NaN    NaN
2    5.0    NaN
3    NaN   10.0
DataFrame đã thay missing data bằng giá trị vô hướng "AnhKiet"
     cột_1    cột_2
0        0      9.1
1  AnhKiet  AnhKiet
2        5  AnhKiet
3  AnhKiet       10

Ví dụ 6:

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
6 cũng có thể được sử dụng trên một cột cụ thể. 

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
0

Output:

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
1

Ví dụ 7: Sử dụng tham số

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
8, các giá trị bị thiếu có thể được thay thế bằng các giá trị trước (
import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
9)  hoặc sau (
Kiểm tra isna cho Series
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool
Kiểm tra isna cho DataFrame
   cột_1  cột_2  cột_3  cột_4
0  False  False  False  False
1  False  False   True  False
2  False   True  False  False
3  False  False  False   True
4   True   True  False  False
5  False  False  False   True
6   True  False  False  False
0) chúng. Key
Kiểm tra isna cho Series
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool
Kiểm tra isna cho DataFrame
   cột_1  cột_2  cột_3  cột_4
0  False  False  False  False
1  False  False   True  False
2  False   True  False  False
3  False  False  False   True
4   True   True  False  False
5  False  False  False   True
6   True  False  False  False
1 sẽ giới hạn bao nhiêu giá trị trước/sau sẽ được lấy thay thế.

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
2

Output:

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
3

Chèn missing data

Pandas cho phép bạn chèn giá trị vào missing data bằng

import pandas as pd
import numpy as np

print('Kiểm tra isna cho Series')
# Tạo một Series chứa missing data dạng số nguyên
ser = pd.Series([1, 2, np.nan, 4, np.nan, 5], dtype=pd.Int64Dtype())

# Series check isna
na_Ser = ser.isna()

print(na_Ser)
''' ----------'''
print('Kiểm tra isna cho DataFrame')
# Tạo DataFrame với chứa missing data loại dấu phẩy động (floating point), None
df = pd.DataFrame({'cột_1':[0, 1, 3, 4, np.nan, 5, np.nan],
                   'cột_2':[9.1, 3.0, np.nan, -5.1, None, 2, 11],
                   'cột_3':['a', np.nan, 'ă', '!', '%', 'be be', 'o'],
                   'cột_4':[True, False, True, None, False, np.nan, True]})

# DataFrame check isna
na_DF = df.isna()

print(na_DF)
6 thì bạn cũng có thể làm ngược lại: chèn missing data vào vị trí đã có giá trị. Giá trị thiếu thực tế được sử dụng sẽ được chọn dựa trên dtype.

Ví dụ 8: Chèn missing data cho các container (Series, DataFrame) chứa con số

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
4

Output:

   cột_1  cột_2  cột_3  cột_4  cột_    cột_NaT
0    0.0    9.1      a   True         1 2020-01-01
1    1.0    3.0    NaN  False         2        NaT
2    3.0    NaN      ă   True       2020-04-01
3    4.0   -5.1      !   None         4 2020-05-01
4    NaN    NaN      %  False       2020-06-01
5    5.0    2.0  be be    NaN         5        NaT
6    NaN   11.0      o   True              NaT
5

Tạm kết

Đến đây mình đã trình bày về các thao tác với mising data hay sử dụng trong pandas. Hi vọng bài viết giúp ích cho các bạn. Các bạn có thể tìm hiểu thêm bằng cách truy cập các đường link trong phần tham khảo. Hãy để lời góp ý trong phần bình luận bên dưới. Cảm ơn các bạn đã đọc. Hẹn gặp lại trong các bài viết tiếp theo.

Tham khảo

1. http://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html

2. https://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html#cookbook-missing-data

3. https://towardsdatascience.com/handling-missing-values-with-pandas-b876bf6f008f