【问题标题】:transform string column of a pandas data frame into 0 1 vectors将 pandas 数据框的字符串列转换为 0 1 个向量
【发布时间】:2017-01-03 17:02:57
【问题描述】:

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

我的问题是,是否有一个简洁的 API 可以将 pandas 数据框的一列转换为 0, 1 向量?我展示了我的代码和熊猫数据框123.csv 的原始内容,假设我想对列c_ac_bc_c 进行二进制处理0, 1,这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  

【问题讨论】:

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


    【解决方案1】:

    你在找get_dummies吗?

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

    如果你想要ints:

    pd.get_dummies(s).astype(np.uint8)
    

    参考:

    Pandas get_dummies to output dtype integer/bool instead of float

    【讨论】:

    • 谢谢HYRY,试过get_dummies,结果好像是0.01.0(好像是float),有没有办法直接转成整数?您可以查看我的帖子更新编辑 1 部分以获得我的试用结果。
    • 感谢HYRY的耐心提供帮助,将您的回复标记为答案,周末愉快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多