[英]How to reformat categorical Pandas variables for Sci-kit Learn
給定一個熊貓dataFrame如下所示:
| | c_0337 | c_0348 | c_0351 | c_0364 |
|-------|:------:|-------:|--------|--------|
| id | | | | |
| 11193 | a | f | o | a |
| 11382 | a | k | s | a |
| 16531 | b | p | f | b |
| 1896 | a | f | o | NaN |
我正在嘗試將分類變量轉換為數字(最好是二進制的true false列),我嘗試使用來自scikit的OneHotEncoder學習如下:
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([c4k.ix[:,'c_0327':'c_0351'].values])
OneHotEncoder(categorical_features='all',
n_values='auto', sparse=True)
那給了我:以10為底的long()無效文字:'f'
我需要將數據放入Scikit學習可接受的數組中,對於大多數條目(例如,非常稀疏)創建的列都為false,對於包含相應字母的已創建列是否為true?
NaN為0 = false
我懷疑我要離開這里嗎? 像不使用正確的預處理器一樣?
這是全新的,因此任何指針都贊賞實際數據集有1000多個這樣的列……因此,我嘗試如下使用DictVectorizer:
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
#fill df with zeros Since we don't want NaN
c4kNZ=c4k.ix[:,'c_0327':'c_0351'].fillna(0)
#Make the dataFrame a Dict
c4kb=c4kNZ.to_dict()
sdata = vec.fit_transform(c4kb)
它給我的float()參數必須是字符串或數字–我重新檢查了字典,對我來說似乎還可以,但是我想我沒有正確設置其格式?
這是你想要的?
它使用get_dummies
將分類列轉換為指示值存在的稀疏偽列:
In [12]: df = pd.DataFrame({'c_0337':list('aaba'), 'c_0348':list('fkpf')})
In [13]: df
Out[13]:
c_0337 c_0348
0 a f
1 a k
2 b p
3 a f
In [14]: pd.get_dummies(df)
Out[14]:
c_0337_a c_0337_b c_0348_f c_0348_k c_0348_p
0 1 0 1 0 0
1 1 0 0 1 0
2 0 1 0 0 1
3 1 0 1 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.