Saya ingin mengganti nilai buruk di kolom kerangka data dengan NaN.
mydata = {'x' : [10, 50, 18, 32, 47, 20], 'y' : ['12', '11', 'N/A', '13', '15', 'N/A']}
df = pd.DataFrame(mydata)
df[df.y == 'N/A']['y'] = np.nan
Padahal, baris terakhir gagal dan mengeluarkan peringatan karena itu bekerja pada salinan df. Jadi, bagaimana cara yang benar untuk mengatasinya? Saya telah melihat banyak solusi dengan iloc atau ix tetapi di sini, saya perlu menggunakan kondisi boolean.
Jawaban:
gunakan saja
replace
:Apa yang Anda coba disebut pengindeksan berantai: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Anda dapat menggunakan
loc
untuk memastikan Anda beroperasi pada dF asli:sumber
Saat menggunakan
replace
tampaknya menyelesaikan masalah, saya ingin mengusulkan alternatif. Masalah dengan campuran nilai numerik dan beberapa nilai string di kolom tidak harus mengganti string dengan np.nan, tetapi untuk membuat seluruh kolom tepat. Saya berani bertaruh bahwa kolom asli kemungkinan besar adalah tipe objekYang benar-benar Anda butuhkan adalah membuatnya menjadi kolom numerik (akan memiliki tipe yang tepat dan akan lebih cepat), dengan semua nilai non-numerik diganti dengan NaN.
Dengan demikian, kode konversi yang baik akan menjadi
Tentukan
errors='coerce'
untuk memaksa string yang tidak dapat diurai menjadi nilai numerik menjadi NaN. Jenis kolom akan menjadisumber
Anda dapat menggunakan ganti:
Perhatikan juga
inplace
parameter untukreplace
. Anda dapat melakukan sesuatu seperti:Ini akan menggantikan semua contoh di df tanpa membuat salinan.
Demikian pula, jika Anda menemukan jenis nilai yang tidak diketahui seperti string kosong atau nilai Tidak ada:
Referensi: Panda Terbaru - Ganti
sumber
Mulai pandas 1.0.0, Anda tidak perlu lagi menggunakan numpy untuk membuat nilai null di dataframe Anda. Sebagai gantinya Anda bisa menggunakan pandas.NA (yang berjenis pandas._libs.missing.NAType), jadi ini akan diperlakukan sebagai null dalam dataframe tetapi tidak akan menjadi null di luar konteks dataframe.
sumber
Ini memecahkan masalah Anda. Dengan ganda [], Anda sedang mengerjakan salinan DataFrame. Anda harus menentukan lokasi yang tepat dalam satu panggilan untuk dapat mengubahnya.
sumber
Anda dapat mencoba cuplikan ini.
sumber
df.replace ('nilai kolom', np.NaN, inplace = True)
sumber