Python - Veri Temizleme
Eksik veriler, gerçek hayat senaryolarında her zaman bir sorundur. Makine öğrenimi ve veri madenciliği gibi alanlar, eksik değerlerin neden olduğu düşük kaliteli veri nedeniyle model tahminlerinin doğruluğunda ciddi sorunlarla karşı karşıyadır. Bu alanlarda, eksik değer işleme, modellerini daha doğru ve geçerli kılmak için ana odak noktasıdır.
Veriler Ne Zaman ve Neden Kaçırılır?
Bir ürün için çevrimiçi bir anket düşünelim. Çoğu zaman insanlar kendileriyle ilgili tüm bilgileri paylaşmazlar. Çok az kişi deneyimlerini paylaşıyor, ancak ürünü ne kadar süre kullandıklarını bilmiyor; çok az kişi ürünü ne kadar süreyle kullandıklarını, deneyimlerini paylaşır ancak iletişim bilgilerini paylaşmaz. Bu nedenle, bir şekilde veya başka bir şekilde verilerin bir kısmı her zaman eksiktir ve bu gerçek zamanlı olarak çok yaygındır.
Şimdi Pandaları kullanarak eksik değerleri (örneğin NA veya NaN) nasıl ele alabileceğimize bakalım.
# 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
Onun output aşağıdaki gibidir -
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
Yeniden indekslemeyi kullanarak, eksik değerlere sahip bir DataFrame oluşturduk. Çıktıda,NaN anlamına geliyor Not a Number.
Eksik Değerleri Kontrol Edin
Eksik değerlerin tespit edilmesini kolaylaştırmak için (ve farklı dizi tipleri arasında) Pandalar, isnull() ve notnull() Series ve DataFrame nesnelerindeki yöntemler olan işlevler -
Misal
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()
Onun output aşağıdaki gibidir -
a False
b True
c False
d True
e False
f False
g True
h False
Name: one, dtype: bool
Eksik Verileri Temizleme / Doldurma
Pandalar, eksik değerleri temizlemek için çeşitli yöntemler sunar. Fillna işlevi, aşağıdaki bölümlerde açıkladığımız gibi NA değerlerini boş olmayan verilerle birkaç şekilde "doldurabilir".
NaN'yi Skaler Bir Değerle Değiştirin
Aşağıdaki program "NaN" yi nasıl "0" ile değiştirebileceğinizi göstermektedir.
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)
Onun output aşağıdaki gibidir -
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
Burada sıfır değeri ile dolduruyoruz; bunun yerine başka herhangi bir değerle de doldurabiliriz.
NA İleri ve Geri Doldurun
Yeniden İndeksleme Bölümünde tartışılan doldurma kavramlarını kullanarak eksik değerleri dolduracağız.
Yöntem | Aksiyon |
---|---|
ped / dolgu | Doldurma yöntemleri İleri |
bfill / backfill | Yöntemleri Geriye Doldur |
Misal
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')
Onun output aşağıdaki gibidir -
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
Eksik Değerleri Bırak
Eksik değerleri basitçe çıkarmak istiyorsanız, o zaman dropna ile birlikte işlev axisargüman. Varsayılan olarak, axis = 0, yani satır boyunca, yani bir satırdaki herhangi bir değer NA ise tüm satır hariçtir.
Misal
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()
Onun output aşağıdaki gibidir -
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
Eksik (veya) Genel Değerleri Değiştirin
Çoğu zaman, genel bir değeri belirli bir değerle değiştirmemiz gerekir. Bunu değiştirme yöntemini uygulayarak başarabiliriz.
NA'yı skaler bir değerle değiştirmek, fillna() işlevi.
Misal
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})
Onun output aşağıdaki gibidir -
one two
0 10 10
1 20 0
2 30 30
3 40 40
4 50 50
5 60 60