อันดับแรกให้สร้างmcveเพื่อเล่นกับ:
import pandas as pd
import numpy as np
In [1]: categorical_array = np.random.choice(['Var1','Var2','Var3'],
size=(5,3), p=[0.25,0.5,0.25])
df = pd.DataFrame(categorical_array,
columns=map(lambda x:chr(97+x), range(categorical_array.shape[1])))
# Add another column that isn't categorical but float
df['d'] = np.random.rand(len(df))
print(df)
Out[1]:
a b c d
0 Var3 Var3 Var3 0.953153
1 Var1 Var2 Var1 0.924896
2 Var2 Var2 Var2 0.273205
3 Var2 Var1 Var3 0.459676
4 Var2 Var1 Var1 0.114358
ตอนนี้เราสามารถใช้pd.get_dummiesเพื่อเข้ารหัสสามคอลัมน์แรก
โปรดทราบว่าฉันกำลังใช้drop_first
พารามิเตอร์เพราะN-1
หุ่นเพียงพอที่จะอธิบายN
ความเป็นไปได้อย่างเต็มที่ (เช่น: ถ้าa_Var2
และa_Var3
เป็น 0 แล้วมันa_Var1
) นอกจากนี้ฉันกำลังระบุคอลัมน์โดยเฉพาะ แต่ฉันไม่ต้องทำเพราะจะเป็นคอลัมน์ที่มี dtype อย่างใดอย่างหนึ่งobject
หรือcategorical
(ด้านล่างเพิ่มเติม)
In [2]: df_encoded = pd.get_dummies(df, columns=['a','b', 'c'], drop_first=True)
print(df_encoded]
Out[2]:
d a_Var2 a_Var3 b_Var2 b_Var3 c_Var2 c_Var3
0 0.953153 0 1 0 1 0 1
1 0.924896 0 0 1 0 0 0
2 0.273205 1 0 1 0 1 0
3 0.459676 1 0 0 0 0 1
4 0.114358 1 0 0 0 0 0
ในแอปพลิเคชันเฉพาะของคุณคุณจะต้องระบุรายการคอลัมน์ที่เป็นหมวดหมู่หรือคุณจะต้องอนุมานว่าคอลัมน์ใดเป็นหมวดหมู่
สถานการณ์กรณีที่ดีที่สุด dataframe ของคุณมีคอลัมน์เหล่านี้แล้วdtype=category
และคุณสามารถส่งcolumns=df.columns[df.dtypes == 'category']
ต่อไปget_dummies
ได้
มิฉะนั้นฉันขอแนะนำให้ตั้งค่าdtype
คอลัมน์อื่น ๆ ทั้งหมดตามความเหมาะสม (คำแนะนำ: pd.to_numeric, pd.to_datetime ฯลฯ ) และคุณจะเหลือคอลัมน์ที่มีobject
dtype ไว้และคอลัมน์เหล่านี้ควรเป็นคอลัมน์หมวดหมู่ของคุณ
คอลัมน์พารามิเตอร์ pd.get_dummies มีค่าดีฟอลต์ดังนี้:
columns : list-like, default None
Column names in the DataFrame to be encoded.
If `columns` is None then all the columns with
`object` or `category` dtype will be converted.