簡體   English   中英

如何為Sci-kit Learn重新格式化分類熊貓變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM