Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Cara Mengisi NaN di DataFrame Pandas

Nilai yang hilang adalah umum dan terjadi baik karena kesalahan manusia, kesalahan instrumen, pemrosesan dari tim lain, atau karena kurangnya data untuk pengamatan tertentu.

Dalam Byte ini, kita akan melihat bagaimana cara mengisi NaN dalam a DataFrame, jika Anda memilih untuk menangani NaN dengan mengisinya.

Pertama, mari kita buat tiruan DataFrame dengan beberapa nilai acak keluar:

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

Mari kita plot, katakanlah, kolom ketiga:

plt.plot(df['Col3'])

Saat diisi dengan berbagai teknik โ€“ grafik yang diisi NaN ini dapat diganti dengan:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

fillna() โ€“ Rata-rata, Median, Modus

Anda dapat mengisi nilai-nilai ini ke dalam kolom baru dan menetapkannya ke kolom yang ingin Anda isi, atau di tempat menggunakan inplace argumen. Di sini, kami akan mengekstrak nilai yang diisi di kolom baru untuk memudahkan pemeriksaan:

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)

Median, mean, dan modus kolom tersebut adalah -0.187669, -0.110873 dan 0.000000 dan nilai-nilai ini akan digunakan untuk setiap NaN masing-masing. Ini secara efektif mengisi dengan nilai konstan, di mana nilai yang dimasukkan tergantung pada entri kolom.

Pertama, mengisi dengan nilai median menghasilkan:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Dengan nilai rata-rata:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Dengan nilai modus:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

fillna() โ€“ Nilai Konstan

Anda juga dapat mengisi dengan nilai konstan sebagai gantinya:

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

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

Ini menghasilkan nilai konstan (0) yang ditempatkan sebagai ganti setiap NaN. 0 dekat dengan median dan mean kami dan sama dengan mode, sehingga nilai yang diisi akan sangat mirip dengan metode tersebut untuk dataset tiruan kami:

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

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

fillna() โ€“ Isi Maju dan Mundur

Pada setiap baris โ€“ Anda dapat melakukan pengisian maju atau mundur, dengan mengambil nilai dari baris sebelum atau sesudah:

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

Dengan forward-filling, karena kita tidak ada di baris 2 โ€“ nilai dari baris 1 diambil untuk mengisi baris kedua. Nilai menyebar ke depan:

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

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Dengan pengisian ke belakang, yang terjadi sebaliknya. Baris 2 diisi dengan nilai dari baris 3:

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

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Padahal, jika ada lebih dari satu NaN secara berurutan โ€“ ini tidak akan berjalan dengan baik dan dapat mengalirkan NaN lebih jauh ke bawah, mencondongkan data dan menghapus nilai yang sebenarnya direkam.

menambah()

Grafik interpolate() metode mendelegasikan interpolasi nilai ke SciPy's rangkaian metode untuk menginterpolasi nilai. Ia menerima berbagai macam argumen, termasuk, nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicspline, Dll

Interpolasi jauh lebih fleksibel dan โ€œpintarโ€ dari sekedar mengisi nilai dengan konstanta atau setengah variabel seperti metode sebelumnya.

Interpolasi dapat mengisi urutan dengan benar dengan cara yang tidak dapat dilakukan oleh metode lain, seperti:

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

Interpolasi default adalah linier, dan dengan asumsi bahwa 1...5 kemungkinan besar 1, 2, 3, 4, 5 urutannya tidak terlalu mengada-ada (tetapi tidak dijamin). Baik pengisian konstan dan pengisian maju atau mundur gagal total di sini. Secara umum โ€“ interpolasi biasanya akan menjadi teman baik dalam hal mengisi NaN dalam sinyal yang bising, atau kumpulan data yang rusak.

Bereksperimen dengan jenis interpolasi dapat menghasilkan hasil yang lebih baik.

Berikut adalah dua metode interpolasi (splice dan polynomial membutuhkan sebuah order argumen):

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

Ini menghasilkan:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Dan:

Cara Mengisi NaN di Pandas DataFrame PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Stempel Waktu:

Lebih dari penyalahgunaan