Misalkan saya memiliki DataFrame dengan beberapa NaN
s:
>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
0 1 2
0 1 2 3
1 4 NaN NaN
2 NaN NaN 9
Apa yang perlu saya lakukan adalah mengganti setiap NaN
dengan yang tidak NaN
bernilai pertama di kolom yang sama di atasnya. Diasumsikan bahwa baris pertama tidak akan pernah mengandung a NaN
. Jadi untuk contoh sebelumnya hasilnya akan
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Saya hanya bisa mengulang seluruh kolom DataFrame, elemen demi elemen dan mengatur nilai-nilai secara langsung, tetapi apakah ada cara mudah (optimal tanpa loop) untuk mencapai ini?
Anda dapat menggunakan
pandas.DataFrame.fillna
denganmethod='ffill'
pilihan.'ffill'
singkatan 'forward fill' dan akan menyebarkan pengamatan valid terakhir ke depan. Alternatifnya adalah'bfill'
yang bekerja dengan cara yang sama, tetapi mundur.Ada juga fungsi sinonim langsung untuk ini
pandas.DataFrame.ffill
,, untuk mempermudah.sumber
Satu hal yang saya perhatikan ketika mencoba solusi ini adalah bahwa jika Anda memiliki N / A di awal atau di akhir array, ffill dan bfill tidak cukup berfungsi. Anda membutuhkan keduanya.
sumber
ffill
sekarang memiliki metode sendiripd.DataFrame.ffill
sumber
Hanya satu versi kolom
sumber
Hanya setuju dengan
ffill
metode, tetapi satu info tambahan adalah bahwa Anda dapat membatasi isi ke depan dengan argumen kata kuncilimit
.Sekarang dengan
limit
argumen kata kuncisumber
Dalam kasus saya, kami memiliki deret waktu dari perangkat yang berbeda tetapi beberapa perangkat tidak dapat mengirim nilai apa pun selama beberapa periode. Jadi kita harus membuat nilai NA untuk setiap perangkat dan periode waktu dan setelah itu lakukan fillna.
Hasil:
sumber
Anda dapat menggunakan
fillna
untuk menghapus atau mengganti nilai NaN.NaN Hapus
Ganti NaN
Referensi pandas.DataFrame.fillna
sumber