一、理論介紹
虛擬變量(dummy variable)也叫啞變量,是一種將多分類變量轉換為二分變量的一種形式。
如果多分類變量有k個類別,則可以轉化為k-1個二分變量。
需要有一個參照的類別。
在非線性關系的模型中,特別重要。
在模型分析時,虛擬變量都是同進同出,要么都在模型中,要么都不在模型中,不能只保留一個。
二、函數介紹
pandas 中可以利用 get_dummies() 函數進行啞變量編碼。
使用語法:
pd.get_dummies(data, # 輸入的數據框
prefix=None, # 列名的前綴
prefix_sep='_', # 分割符
dummy_na=False, # 增加一列空缺值
columns=None, # 指定要實現轉換的列名
sparse=False,
drop_first=False, # 刪除第一個類別值
dtype=None)
三、實操
1.Series轉換
import pandas as pd
import numpy as np
s = pd.Series(list('abca'))
pd.get_dummies(s)
'''
a b c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
'''
2.dummy_na 空缺值
s1 = ['a','b',np.nan]
pd.get_dummies(s1)
'''
a b
0 1 0
1 0 1
2 0 0
'''
pd.get_dummies(s1, dummy_na=True)
'''
a b NaN
0 1 0 0
1 0 1 0
2 0 0 1
'''
3.prefix
prefix='' 參數設置編碼后的變量名,默認為:原始列名_取值。
df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
'C': [1, 2, 3]})
pd.get_dummies(df)
'''
C A_a A_b B_a B_b B_c
0 1 1 0 0 1 0
1 2 0 1 1 0 0
2 3 1 0 0 0 1
'''
pd.get_dummies(df, prefix=['col1', 'col2'])
'''
C col1_a col1_b col2_a col2_b col2_c
0 1 1 0 0 1 0
1 2 0 1 1 0 0
2 3 1 0 0 0 1
'''
4.drop_first
drop_first 參數刪除第一個類別,避免多重共線性。
pd.get_dummies(pd.Series(list('abcaa')))
pd.get_dummies(pd.Series(list('abcaa')), drop_first=True) # 刪掉第一個
5.dtype
# 設置類型
pd.get_dummies(pd.Series(list('abc')), dtype=float) # 浮點數 1.0 0.0
6.其他
# 合並至原始數據
df = df.join(pd.get_dummies(df.A))
pd.get_dummies(df, columns=['A'])
參考鏈接:pandas.get_dummies
