Saya mencoba untuk mengisi nilai dalam dataframe Pandas dengan 0 untuk hanya beberapa subset kolom.
Ketika saya melakukannya:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
Hasil:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Ini menggantikan setiap None
dengan 0
. Yang ingin saya lakukan adalah, hanya mengganti None
s di kolom a
dan b
, tetapi tidak c
.
Apa cara terbaik untuk melakukan ini?
df[['a', 'b']] = df[['a','b']].fillna(value=0)
inplace
masih akan bekerja pada salinan. Saya tidak tahu apakah ini benarfillna
atau tidak. Lihat jawaban ini dari salah satu pengembang inti panda.Anda dapat menggunakan
dict
,fillna
dengan nilai berbeda untuk kolom berbedaSetelah menetapkan kembali
sumber
fromkeys
jika Anda mau, +1df.fillna({'a':0,'b':0}, inplace=True)
Anda dapat menghindari membuat salinan objek menggunakan solusi Wen dan inplace = Benar:
Yang menghasilkan:
sumber
Inilah cara Anda dapat melakukan semuanya dalam satu baris:
Breakdown:
df[['a', 'b']]
memilih kolom yang ingin Anda isi dengan nilai NaN,value=0
memintanya untuk mengisi NaN dengan nol, daninplace=True
akan membuat perubahan permanen, tanpa harus membuat salinan objek.sumber
menggunakan jawaban teratas menghasilkan peringatan tentang membuat perubahan pada salinan df slice. Dengan anggapan Anda memiliki kolom lain, cara yang lebih baik untuk melakukannya adalah dengan menggunakan kamus:
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)
sumber
Atau sesuatu seperti:
dan jika ada lagi:
sumber
Terkadang sintaks ini tidak berfungsi:
Gunakan yang berikut ini sebagai gantinya:
sumber