Saya memiliki kerangka data dengan jenis data ini (terlalu banyak kolom):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Kolom terlihat seperti ini:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Saya ingin mengubah semua nilai dalam kolom menjadi integer seperti ini:
[1, 2, 3, 4, 5, 6, 7, 8]
Saya menyelesaikan ini untuk satu kolom dengan ini:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Sekarang saya memiliki dua kolom di dataframe saya - lama col3
dan baru c
dan perlu membuang kolom lama.
Itu praktik yang buruk. Ini berfungsi tetapi dalam banyak kolom bingkai data saya dan saya tidak ingin melakukannya secara manual.
Bagaimana pythonic ini dan hanya cerdik?
df['col2'].cat.categories
misalnya.NaN
secara unik ke-1
cat.codes
mungkin BUKAN seperti yang Anda lihat di Seri!Ini bekerja untuk saya:
Keluaran:
sumber
Jika kekhawatiran Anda hanya membuat kolom tambahan dan menghapusnya nanti, jangan gunakan kolom baru di tempat pertama.
Kamu selesai. Sekarang karena
Categorical.from_array
sudah usang, gunakanCategorical
secara langsungJika Anda juga membutuhkan pemetaan kembali dari indeks ke label, ada cara yang lebih baik untuk hal yang sama
periksa di bawah
sumber
Di sini beberapa kolom perlu diubah. Jadi, satu pendekatan yang saya gunakan adalah ..
Ini mengubah semua kolom tipe string / objek menjadi kategorikal. Kemudian terapkan kode untuk setiap jenis kategori.
sumber
Untuk mengonversi data kategorikal di kolom C dari data set data , kita perlu melakukan hal berikut:
sumber
Apa yang saya lakukan adalah, saya
replace
menghargai.Seperti ini-
Dengan cara ini, jika
col
kolom memiliki nilai kategorik, nilai tersebut diganti dengan nilai numerik.sumber
@ Quickbeam2k1, lihat di bawah -
Menggunakan sklearn
sumber
fit_transform
sekarang, bukantransform_fit
dan mengoreksi definisi labelencoder. Mengapa Anda menggunakaniloc[:,:]
? ini tidak berguna. Apa alasan dibalik gambar tersebut? Jika Anda ingin membuktikan kepada saya dan @theGtknerd salah Anda gagal.Untuk kolom tertentu, jika Anda tidak peduli dengan urutannya, gunakan ini
Jika Anda peduli tentang pemesanan, tentukan sebagai daftar dan gunakan ini
sumber