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