Python Pandas - Data Hilang

Data yang hilang selalu menjadi masalah dalam skenario kehidupan nyata. Area seperti pembelajaran mesin dan penggalian data menghadapi masalah parah dalam keakuratan prediksi modelnya karena kualitas data yang buruk yang disebabkan oleh nilai yang hilang. Di area ini, perlakuan nilai yang hilang merupakan titik fokus utama untuk membuat model mereka lebih akurat dan valid.

Kapan dan Mengapa Data Tidak Ada?

Mari kita pertimbangkan survei online untuk suatu produk. Seringkali, orang tidak membagikan semua informasi yang berkaitan dengan mereka. Hanya sedikit orang yang membagikan pengalaman mereka, tetapi tidak berapa lama mereka menggunakan produk; hanya sedikit orang yang berbagi berapa lama mereka menggunakan produk, pengalaman mereka, tetapi bukan informasi kontak mereka. Jadi, dalam beberapa hal atau dengan cara lain, sebagian data selalu hilang, dan ini sangat umum dalam waktu nyata.

Sekarang mari kita lihat bagaimana kita dapat menangani nilai yang hilang (katakanlah NA atau NaN) menggunakan 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

Nya output adalah sebagai berikut -

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

Menggunakan pengindeksan ulang, kami telah membuat DataFrame dengan nilai yang hilang. Dalam keluarannya,NaN cara Not a Number.

Periksa Nilai yang Hilang

Untuk mempermudah pendeteksian nilai yang hilang (dan di berbagai tipe d array), Pandas menyediakan isnull() dan notnull() fungsi, yang juga merupakan metode pada objek Series dan DataFrame -

Contoh 1

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()

Nya output adalah sebagai berikut -

a  False
b  True
c  False
d  True
e  False
f  False
g  True
h  False
Name: one, dtype: bool

Contoh 2

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()

Nya output adalah sebagai berikut -

a  True
b  False
c  True
d  False
e  True
f  True
g  False
h  True
Name: one, dtype: bool

Perhitungan dengan Data yang Hilang

  • Saat menjumlahkan data, NA akan diperlakukan sebagai Nol
  • Jika semua datanya NA, maka hasilnya NA

Contoh 1

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()

Nya output adalah sebagai berikut -

2.02357685917

Contoh 2

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()

Nya output adalah sebagai berikut -

nan

Membersihkan / Mengisi Data yang Hilang

Panda menyediakan berbagai metode untuk membersihkan nilai yang hilang. Fungsi fillna dapat “mengisi” nilai NA dengan data non-null dalam beberapa cara, yang telah kita ilustrasikan pada bagian berikut.

Gantikan NaN dengan Nilai Skalar

Program berikut menunjukkan bagaimana Anda dapat mengganti "NaN" dengan "0".

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)

Nya output adalah sebagai berikut -

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

Di sini, kami mengisi dengan nilai nol; sebagai gantinya kita juga bisa mengisi dengan nilai lainnya.

Isi NA Maju dan Mundur

Menggunakan konsep pengisian yang dibahas dalam Bab Pengindeksan Ulang kami akan mengisi nilai yang hilang.

Sr Tidak Metode & Tindakan
1

pad/fill

Metode Isi Teruskan

2

bfill/backfill

Metode Isi Mundur

Contoh 1

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')

Nya output adalah sebagai berikut -

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

Contoh 2

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')

Nya output adalah sebagai berikut -

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

Jatuhkan Nilai yang Hilang

Jika Anda hanya ingin mengecualikan nilai yang hilang, gunakan dropna berfungsi bersama dengan axisargumen. Secara default, axis = 0, yaitu, sepanjang baris, yang berarti bahwa jika ada nilai dalam satu baris adalah NA maka seluruh baris akan dikecualikan.

Contoh 1

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()

Nya output adalah sebagai berikut -

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

Contoh 2

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)

Nya output adalah sebagai berikut -

Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]

Ganti Nilai Generik yang Hilang (atau)

Sering kali, kita harus mengganti nilai generik dengan nilai tertentu. Kami dapat mencapai ini dengan menerapkan metode ganti.

Mengganti NA dengan nilai skalar adalah perilaku setara dari fillna() fungsi.

Contoh 1

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})

Nya output adalah sebagai berikut -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

Contoh 2

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})

Nya output adalah sebagai berikut -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60