Python Pandas - Eksik Veriler
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 -
örnek 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()
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
Örnek 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()
Onun output aşağıdaki gibidir -
a True
b False
c True
d False
e True
f True
g False
h True
Name: one, dtype: bool
Eksik Verilerle Hesaplamalar
- Veriler toplanırken NA, Sıfır olarak değerlendirilecektir
- Verilerin tümü NA ise, sonuç NA olacaktır
örnek 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()
Onun output aşağıdaki gibidir -
2.02357685917
Örnek 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()
Onun output aşağıdaki gibidir -
nan
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.
Sr.No | Yöntem ve Eylem |
---|---|
1 | pad/fill Doldurma yöntemleri İleri |
2 | bfill/backfill Yöntemleri Geriye Doldur |
örnek 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')
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
Örnek 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')
Onun output aşağıdaki gibidir -
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
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ç tutulur.
örnek 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()
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
Örnek 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)
Onun output aşağıdaki gibidir -
Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]
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.
örnek 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})
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
Örnek 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})
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