将pandas数据帧的字符串列转换为0 1个向量

时间:2016-08-27 00:05:22

标签: python python-2.7 pandas numpy one-hot-encoding

LabelEncoderOneHotEncoder非常适合numpy数组,它将字符串转换为基于0,1的向量。

我的问题是,是否有一个简洁的API将pandas数据框的列转换为0, 1向量?我展示了我的pandas数据框123.csv的代码和原始内容,假设我想对列0, 1c_ac_b进行二进制c_c,每个3列是独立的,我希望二进制0, 1为独立的。

代码,

import pandas as pd
sample=pd.read_csv('123.csv', sep=',',header=None)
print sample.dtypes

123.csv内容,

c_a,c_b,c_c,c_d
hello,python,pandas,1.2
hi,c++,vector,1.2

numpy的标签编码器和OneHotEncoder示例,

from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder

S = np.array(['b','a','c'])
le = LabelEncoder()
S = le.fit_transform(S)
print(S)
ohe = OneHotEncoder()
one_hot = ohe.fit_transform(S.reshape(-1,1)).toarray()
print(one_hot)
which results in:

[1 0 2]

[[ 0.  1.  0.]
 [ 1.  0.  0.]
 [ 0.  0.  1.]]

修改1 ,尝试get_dummies,结果似乎是0.01.0(似乎float),有没有办法直接转换成整数?

   0_c_a  0_hello  0_hi  0_ho  1_c++  1_c_b  1_java  1_python  2_c_c  2_numpy  \
0    1.0      0.0   0.0   0.0    0.0    1.0     0.0       0.0    1.0      0.0   
1    0.0      1.0   0.0   0.0    0.0    0.0     0.0       1.0    0.0      0.0   
2    0.0      0.0   1.0   0.0    0.0    0.0     1.0       0.0    0.0      0.0   
3    0.0      0.0   0.0   1.0    1.0    0.0     0.0       0.0    0.0      1.0  

1 个答案:

答案 0 :(得分:2)

您在寻找<Months setMonth={this.setMonth.bind(this)} /> 吗?

<MonthsTable setMonth={this.props.setMonth} />

如果您需要get_dummies

s = pd.Series(["a", "b", "a", "c"])
pd.get_dummies(s)

参考:

Pandas get_dummies to output dtype integer/bool instead of float