Saya memiliki dataframe seperti di bawah ini
itm Date Amount
67 420 2012-09-30 00:00:00 65211
68 421 2012-09-09 00:00:00 29424
69 421 2012-09-16 00:00:00 29877
70 421 2012-09-23 00:00:00 30990
71 421 2012-09-30 00:00:00 61303
72 485 2012-09-09 00:00:00 71781
73 485 2012-09-16 00:00:00 NaN
74 485 2012-09-23 00:00:00 11072
75 485 2012-09-30 00:00:00 113702
76 489 2012-09-09 00:00:00 64731
77 489 2012-09-16 00:00:00 NaN
ketika saya mencoba. Menerapkan fungsi ke kolom Jumlah saya mendapatkan kesalahan berikut.
ValueError: cannot convert float NaN to integer
Saya telah mencoba menerapkan fungsi menggunakan .isnan dari Modul Matematika. Saya telah mencoba panda. Ganti atribut. Saya mencoba atribut. Saya juga telah melihat artikel ini. Bagaimana cara mengganti nilai-nilai NA dengan nol dalam kerangka data R? sambil melihat beberapa artikel lainnya. Semua metode yang saya coba belum berhasil atau tidak mengenali NaN. Setiap Petunjuk atau solusi akan dihargai.
Jawaban:
Saya percaya
DataFrame.fillna()
akan melakukan ini untuk Anda.Tautan ke Documents untuk kerangka data dan Seri .
Contoh:
Untuk mengisi NaN hanya dalam satu kolom, pilih saja kolom itu. dalam hal ini saya menggunakan inplace = Benar untuk benar-benar mengubah isi df.
EDIT:
Untuk menghindari a
SettingWithCopyWarning
, gunakan fungsionalitas khusus kolom bawaan:sumber
df[1]
adalah tampilan dan bukan salinan DF asli? Jelas, jika ada situasi langka di mana salinannya, itu akan menyebabkan bug yang sangat merepotkan. Apakah ada pernyataan yang jelas tentang hal itu dalam dokumentasi panda?Tidak dijamin bahwa pengirisan mengembalikan tampilan atau salinan. Anda dapat melakukan
sumber
Anda dapat menggunakan
replace
untuk mengubahNaN
ke0
:sumber
NaN
? atau itu juga akan menggantikan nilai di manaNA
atauNaN
sukadf.fillna(0)
? Saya mencari solusi yang hanya menggantikan nilai di mana adaNaN
dan tidakNA
NaN
nilai yaitu di mananp.isnan
BenarSaya hanya ingin memberikan sedikit pembaruan / kasus khusus karena sepertinya orang masih datang ke sini. Jika Anda menggunakan multi-indeks atau menggunakan slicer indeks, inplace = opsi True mungkin tidak cukup untuk memperbarui slice yang Anda pilih. Misalnya dalam multi-indeks level 2x2 ini tidak akan mengubah nilai apa pun (pada panda 0.15):
"Masalahnya" adalah bahwa rantai merusak kemampuan fillna untuk memperbarui kerangka data asli. Saya memasukkan "masalah" dalam tanda kutip karena ada alasan bagus untuk keputusan desain yang menyebabkan tidak menafsirkan melalui rantai ini dalam situasi tertentu. Juga, ini adalah contoh yang kompleks (meskipun saya benar-benar berlari ke dalamnya), tetapi hal yang sama dapat berlaku untuk tingkat indeks yang lebih sedikit tergantung pada bagaimana Anda mengiris.
Solusinya adalah DataFrame.update:
Ini satu baris, terbaca dengan cukup baik (semacam) dan menghilangkan segala macam yang tidak perlu dengan variabel menengah atau loop sambil memungkinkan Anda untuk menerapkan fillna ke setiap irisan multi-level yang Anda suka!
Jika ada yang bisa menemukan tempat ini tidak berfungsi, silakan posting di komentar, saya telah mengacaukannya dan melihat sumbernya dan tampaknya untuk menyelesaikan setidaknya masalah irisan multi-indeks saya.
sumber
Kode di bawah ini berfungsi untuk saya.
sumber
Cara mudah untuk mengisi nilai yang hilang: -
mengisi kolom string: ketika kolom string memiliki nilai yang hilang dan nilai NaN.
mengisi kolom numerik: ketika kolom numerik memiliki nilai yang hilang dan nilai NaN.
mengisi NaN dengan nol:
sumber
Anda juga dapat menggunakan kamus untuk mengisi nilai NaN dari kolom tertentu dalam DataFrame alih-alih mengisi semua DF dengan beberapa nilai.
sumber
Mempertimbangkan kolom tertentu
Amount
dalam tabel di atas adalah tipe integer. Berikut ini akan menjadi solusi:Demikian pula, Anda dapat mengisinya dengan berbagai tipe data seperti
float
,str
dan sebagainya.Secara khusus, saya akan mempertimbangkan tipe data untuk membandingkan berbagai nilai dari kolom yang sama.
sumber
Untuk mengganti nilai na dalam panda
jika
inplace = False
, alih-alih memperbarui df (dataframe), itu akan mengembalikan nilai yang dimodifikasi.sumber
Jika Anda mengonversinya menjadi bingkai data panda, Anda juga dapat melakukannya dengan menggunakan
fillna
.Ini akan mengembalikan yang berikut:
sumber
Ada dua opsi yang tersedia terutama; dalam kasus imputasi atau pengisian nilai yang hilang NaN / np.nan dengan hanya penggantian numerik (di seluruh kolom:
df['Amount'].fillna(value=None, method= ,axis=1,)
Cukup:Dari Dokumentasi:
value: skalar, dict, Series, atau DataFrame Value yang digunakan untuk mengisi lubang (mis. 0), secara bergantian dict / Series / DataFrame dari nilai yang menentukan nilai yang akan digunakan untuk setiap indeks (untuk Seri) atau kolom (untuk DataFrame) . (nilai tidak dalam dikt / Seri / DataFrame tidak akan diisi). Nilai ini tidak boleh berupa daftar.
Yang berarti 'string' atau 'konstanta' tidak lagi diizinkan untuk diperhitungkan.
Untuk imputasi yang lebih khusus gunakan SimpleImputer () :
sumber
Untuk mengganti nan di kolom yang berbeda dengan cara berbeda:
sumber