将 pandas 数据框的字符串列转换为 0 1 个向量
transform string column of a pandas data frame into 0 1 vectors
LabelEncoder
和 OneHotEncoder
对 numpy 数组非常有效,它将字符串转换为基于 0,1
的向量。
我的问题是,是否有一种简洁的 API 可以将 pandas 数据框的列转换为 0, 1
向量?我展示了 pandas 数据框 123.csv
的代码和原始内容,假设我想对 c_a
、c_b
、[=23= 列进行二进制 0, 1
], 3列每一列都是独立的,我想二进制0, 1
为separately independent.
代码,
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.0
和 1.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
您在寻找 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
LabelEncoder
和 OneHotEncoder
对 numpy 数组非常有效,它将字符串转换为基于 0,1
的向量。
我的问题是,是否有一种简洁的 API 可以将 pandas 数据框的列转换为 0, 1
向量?我展示了 pandas 数据框 123.csv
的代码和原始内容,假设我想对 c_a
、c_b
、[=23= 列进行二进制 0, 1
], 3列每一列都是独立的,我想二进制0, 1
为separately independent.
代码,
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.0
和 1.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
您在寻找 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