Saya memiliki bingkai data panda dengan banyak kolom kategori, yang saya rencanakan untuk digunakan di pohon keputusan dengan scikit-belajar. Saya perlu mengubahnya menjadi nilai numerik (bukan satu vektor panas). Saya dapat melakukannya dengan LabelEncoder dari scikit-learn. Masalahnya ada terlalu banyak, dan saya tidak ingin mengonversinya secara manual.
Apa yang akan menjadi cara mudah untuk mengotomatisasi proses ini.
scikit-learn
pandas
categorical-data
labels
pengguna1700890
sumber
sumber
Jawaban:
Jika kolom kategorikal Anda saat ini adalah karakter / objek, Anda dapat menggunakan sesuatu seperti ini untuk melakukan masing-masing:
Jika Anda harus dapat kembali ke kategori saya akan membuat kamus untuk menyimpan pengodean; sesuatu seperti:
Menggunakan Julien mcve akan menampilkan:
sumber
object
kolom sangat berguna.Pertama, mari kita buat mcve untuk dimainkan:
Sekarang kita bisa menggunakan pd.get_dummies untuk menyandikan tiga kolom pertama.
Perhatikan bahwa saya menggunakan
drop_first
parameter karenaN-1
boneka sudah cukup untuk sepenuhnya menggambarkanN
kemungkinan (misalnya: jikaa_Var2
dana_Var3
0, maka itua_Var1
). Juga, saya secara spesifik menentukan kolom tetapi saya tidak harus karena akan menjadi kolom dengan dtype baikobject
ataucategorical
(lebih banyak di bawah).Dalam aplikasi spesifik Anda, Anda harus memberikan daftar kolom yang Kategorikal, atau Anda harus menyimpulkan kolom mana yang Kategorikal.
Skenario terbaik dataframe Anda sudah memiliki kolom ini dengan
dtype=category
dan Anda dapat melewaticolumns=df.columns[df.dtypes == 'category']
keget_dummies
.Kalau tidak, saya sarankan untuk mengatur
dtype
semua kolom lainnya sesuai (petunjuk: pd.to_numeric, pd.to_datetime, dll) dan Anda akan dibiarkan dengan kolom yang memilikiobject
dtype dan ini harus menjadi kolom kategori Anda.Kolom parameter pd.get_dummies default sebagai berikut:
sumber
Untuk mengonversi jenis beberapa kolom sekaligus saya akan menggunakan sesuatu seperti ini:
Lalu aku akan bergabung dengan mereka kembali
original df
.sumber
df2[df2.columns] = df2[df2.columns].astype('category')
melakukan hal yang sama, tidakapply
, tidaklambda
.