pandas之get_dummies
方法:pandas.get_dummies(data,prefix=None,prefix_sep="_",dummy_na=False,columns=None,sparse=False,drop_first=False)
該方法可以將類別變量轉換成新增的虛擬變量/指示變量
參數說明:
-
data:array-like、Series 、 DataFrame , 輸入數據
-
prefix:string、list of strings、dict of strings ,default為None,get_dummies轉換后,列名的前綴
-
columns:list-like, default為False,指定需要實現類別轉換的列名
-
dummy_na:bool, default為False,增加一列表示空缺值,如果False就忽略空缺值
-
drop_first:fool,default為False ,獲取K中的K-1個類別之,去除第一個
舉例:
下面通過例子來進一步說明get_dummies()
1、首先構造一個數據列
1 import pandas as pd 2 s=pd.Series(list('abca')) 3
4 s_1=pd.get_dummies(s)
1、兩個變量:s為Series、s_1為DataFrame
變成→
2、去除第一列
1 b=pd.get_dummies(s,drop_first=True)
得到:
3、查看dummy_na功能
創建數據
1 import numpy as np 2 s_2=["a","b",np.nan]
結果為:
1 pd.get_dummies(s_2,dummy_na=True) 2 pd.get_dummies(s_2,dummy_na=False)
結果為:
、
4、創建數據框
1 df=pd.DataFrame({ 2 "A":["a","b","a"],"B":["b","a","c"], 3 "C":[1,2,3]}) 4 pd.get_dummies(df,prefix=["col_1","col_2"])
結果為:
變為→
實例:
1 import pandas 2 3 data=pandas.read_csv( 4 "C:\\Users\\Jw\\Desktop\\python_work\\Python數據挖掘實戰課程課件\\5.2\\data1.csv", 5 encoding='utf-8') 6 7 8 dummyColumns=['症狀','職業'] 9 10 for column in dummyColumns: 11 data[column]=data[column].astype('category') 12 13 14 dummiesData=pandas.get_dummies( 15 data, 16 columns=dummyColumns, 17 prefix=dummyColumns, 18 prefix_sep=' ') 19 20 dummiesData=pandas.get_dummies( 21 data, 22 columns=dummyColumns, 23 prefix=dummyColumns, 24 prefix_sep=' ', 25 drop_first=True)
構造虛擬變量
drop_first后
實例
步驟:
- 導入數據,設置虛擬變量,將虛擬變量轉變為category類,(category變量)類別變量轉換成新增的虛擬變量/指示變量
- 通過pandas自帶的get_dummies功能,將所有分類扁平化擴張以增加列的形式實現,離散數據按照[0,1]分布。
知識點:
Categorical Type:什么是categorical Type?不知道確切的英文翻譯,但是可以按照字面意思來也就是分類數據,比如皮膚的顏色,可以分為黃色,白色,黑色等等,但是這些數據的均值以及數值計算比如加減的結果是沒有意義的;但是我們可以將不同的數據分為這幾類,在比如人類的性別,男女也屬於categorical 類別; 英文中歐冠也可以稱之為Nominal Data.
1 import pandas; 2 3 data = pandas.read_csv( 4 "C:\\Users\\Jw\\Desktop\\python_work\\Python數據挖掘實戰課程課件\\5.2\\data1.csv", 5 encoding='utf8' 6 ) 7 8 dummyColumns = ['症狀', '職業'] 9 10 for column in dummyColumns: 11 data[column]=data[column].astype('category') 12 13 dummiesData = pandas.get_dummies( #調用get_dummyColumns方法進行不可比較大小虛擬變量的轉換 14 data, 15 columns=dummyColumns, 16 prefix=dummyColumns, 17 prefix_sep=" " 18 ) 19 20 dummiesData = pandas.get_dummies( 21 data, 22 columns=dummyColumns, 23 prefix=dummyColumns, 24 prefix_sep=" ", 25 drop_first=True 26 )
1 #伯努利貝葉斯 2 from sklearn.naive_bayes import BernoulliNB 3 BNBModel = BernoulliNB() 4 5 fNames = ['症狀 打噴嚏', '職業 建築工人', '職業 護士', '職業 教師'] 6 tData = dummiesData['疾病'] 7 fData = dummiesData[fNames] 8 9 BNBModel.fit(fData, tData)
上述代碼:建模,構造伯努利方程,設置自變量和因變量,訓練變量,得到訓練集
1 #病症是打噴嚏的建築工人 2 newData = pandas.DataFrame({ 3 '症狀':['打噴嚏'], 4 '職業':['建築工人'] 5 }) 6 7 for column in dummyColumns: 8 newData[column] = newData[column].astype( 9 'category', 10 categories=data[column].cat.categories 11 ) 12 13 dummiesNewData = pandas.get_dummies( 14 newData, 15 columns=dummyColumns, 16 prefix=dummyColumns, 17 prefix_sep=" ", 18 drop_first=True 19 ) 20 21 pData = dummiesNewData[fNames] 22 BNBModel.predict(pData)
訓練:
1 #病症是打噴嚏的建築工人 2 newData=pandas.DataFrame({ 3 '症狀':['打噴嚏'], 4 '職業':['建築工人']}) 5 6 for column in dummyColumns: 7 newData[column]=newData[column].astype( 8 'category', 9 categories=data[column].cat.categories 10 ) 11 12 dummiesNewData=pandas.get_dummies( 13 newData, 14 columns=dummyColumns, 15 prefix=dummyColumns, 16 prefix_sep=' ', 17 drop_first=True) 18 19 pData=dummiesNewData[fNames] 20 BNBModel.predict(pData)