Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Pandas DataFrame'de NaN'ler Nasıl Doldurulur

Eksik değerler yaygındır ve insan hatası, alet hatası, başka bir ekipten işleme veya belirli bir gözlem için veri eksikliği nedeniyle oluşur.

Bu Bayt'ta, NaN'lerin nasıl doldurulacağına bir göz atacağız. DataFrame, NaN'leri doldurarak işlemeyi seçerseniz.

İlk önce, bir sahte oluşturalım DataFrame bazı rastgele değerler düştü:

import numpy as np
array = np.random.randn(25, 3)
mask = np.random.choice([1, 0], array.shape, p=[.3, .7]).astype(bool)
array[mask] = np.nan

df = pd.DataFrame(array, columns=['Col1', 'Col2', 'Col3'])
        Col1      Col2      Col3 
0  -0.671603 -0.792415  0.783922
1   0.207720       NaN  0.996131
2  -0.892115 -1.282333       NaN
3  -0.315598 -2.371529 -1.959646
4        NaN       NaN -0.584636
5   0.314736 -0.692732 -0.303951
6   0.355121       NaN       NaN
7        NaN -1.900148  1.230828
8  -1.795468  0.490953       NaN
9  -0.678491 -0.087815       NaN
10  0.755714  0.550589 -0.702019
11  0.951908 -0.529933  0.344544
12       NaN  0.075340 -0.187669
13       NaN  0.314342 -0.936066
14       NaN  1.293355  0.098964

Diyelim ki üçüncü sütunu çizelim:

plt.plot(df['Col3'])

Çeşitli tekniklerle doldurulduğunda – bu NaN dolgulu grafik aşağıdakilerle değiştirilebilir:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

fillna() – Ortalama, Medyan, Mod

Bu değerleri yeni bir sütuna doldurabilir ve doldurmak istediğiniz sütuna veya yerinde atayabilirsiniz. inplace argüman. Burada, inceleme kolaylığı için doldurulan değerleri yeni bir sütuna çıkaracağız:

mean = df['Col3'].fillna(df['Col3'].mean(), inplace=False)
median = df['Col3'].fillna(df['Col3'].median(), inplace=False)
mode = df['Col3'].fillna(df['Col3'].mode(), inplace=False)

Sütunun medyanı, ortalaması ve modu -0.187669, -0.110873 ve 0.000000 ve bu değerler sırasıyla her NaN için kullanılacaktır. Bu, girilen değerin sütunun içeriğine bağlı olduğu sabit değerlerle etkin bir şekilde doldurulur.

İlk olarak, medyan değerlerle doldurmak şu sonuçları verir:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Ortalama değerlerle:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Mod değerleriyle:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

fillna() – Sabit Değer

Bunun yerine sabit bir değerle de doldurabilirsiniz:

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

constant = df['Col3'].fillna(0, inplace=False

Bu, her NaN yerine sabit bir değerin (0) konmasına neden olur. 0 medyanımıza yakın ve ortalama ve moda eşit, bu nedenle doldurulan değerler, sahte veri kümemiz için bu yönteme çok benzeyecektir:

0     0.783922
1     0.996131
2     0.000000
3    -1.959646
4    -0.584636
5    -0.303951
6     0.000000
7     1.230828
8     0.000000
9     0.000000
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

fillna() – İleri ve Geri Doldurma

Her satırda - önceki veya sonraki satırdan değeri alarak ileri veya geri doldurma yapabilirsiniz:

ffill = df['Col3'].fillna(method='ffill')
bfill = df['Col3'].fillna(method='bfill')

İleri doldurmada, 2. satırda eksik olduğumuz için – ikinci satırı doldurmak için 1. satırdaki değer alınır. Değerler ileriye doğru yayılır:

0     0.783922
1     0.996131
2     0.996131
3    -1.959646
4    -0.584636
5    -0.303951
6    -0.303951
7     1.230828
8     1.230828
9     1.230828
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Geri doldurmada ise tam tersi olur. Satır 2, satır 3'teki değerle doldurulur.

0     0.783922
1     0.996131
2    -1.959646
3    -1.959646
4    -0.584636
5    -0.303951
6     1.230828
7     1.230828
8    -0.702019
9    -0.702019
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Yine de, birden fazla varsa NaN sırayla – bunlar iyi sonuç vermez ve NaN'leri daha da aşağı kademelendirebilir, verileri çarpıtabilir ve gerçekte kaydedilen değerleri kaldırabilir.

enterpolasyon()

The interpolate() yöntem, değerlerin enterpolasyonunu SciPy's'e devreder değerleri enterpolasyon için yöntemler paketi. Aşağıdakiler de dahil olmak üzere çok çeşitli argümanları kabul eder: nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicspline, vb.

İnterpolasyon, önceki yöntemler gibi değerleri sabitler veya yarı değişkenlerle doldurmaktan çok daha esnek ve “akıllı”dır.

Enterpolasyon, bir diziyi başka hiçbir yöntemin yapamayacağı şekilde düzgün bir şekilde doldurabilir, örneğin:

s = pd.Series([0, 1, np.nan, np.nan, np.nan, 5])
s.fillna(s.mean()).values

s.fillna(method='ffill').values

s.interpolate().values

Varsayılan enterpolasyon doğrusaldır ve 1...5 muhtemelen bir 1, 2, 3, 4, 5 dizi çok uzak değil (ancak garanti edilmiyor). Hem sürekli doldurma hem de ileri veya geri doldurma burada sefil bir şekilde başarısız olur. Genel olarak konuşursak - NaN'leri gürültülü sinyallerle veya bozuk veri kümeleriyle doldurmak söz konusu olduğunda enterpolasyon genellikle iyi bir arkadaş olacaktır.

İnterpolasyon türleri ile denemeler yapmak daha iyi sonuçlar verebilir.

İşte iki enterpolasyon yöntemi (splice ve polynomial bir order argüman):

nearest = df['Col3'].interpolate(method='nearest')
polynomial = df['Col3'].interpolate(method='polynomial', order=3)

Bunlar şunlarla sonuçlanır:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Ve:

Pandas DataFrame'de NaN'ler Nasıl Doldurulur PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı