在python数据分析和机器学习过程中,需要将一些已进行分类后的原数据转换成数字的类型,这里就需要一些方法将这些类别转换成one-hot编码,以供计算机进行识别运算。
# 转换方法一:
import pandas as pd
import numpy as np
data = {'animal': ['dog', 'cat', 'bird'], 'age': [1, 2, 1],
'owner': ['jacky', 'tom', 'terry']}
data = pd.DataFrame(data)
trans_ls = ['animal', 'owner'] # 这里手动选择了,因为age这一行不需要转换
for column in trans_ls:
type_ls = data[column].unique()
for i in type_ls:
i_bool = data[column]==i
data[i] = i_bool.astype(np.int32)
data = data.drop(column, axis=1)
print(data)
# 转换方法二:
import pandas as pd
import numpy as np
data = {'animal': ['dog', 'cat', 'bird'], 'age': [1, 2, 1],
'owner': ['jacky', 'tom', 'terry']}
data = pd.DataFrame(data)
data = pd.get_dummies(data, prefix=['animal', 'owner'])
#prefix是转换后加追加在列前边的字符串,需和需转换的列长度一致
print(data)
#这个方法较为快速,且智能,对于int,float就默认不转换了
#这里也可以将需要转换的列构造成一个列表,然后使用for循环遍历,用pd.concat()连接在一起
# 转换方法三:
#这里用的是构建一个新的列表,将某一object列转换成one-hot编码
import pandas as pd
data = {'animal': ['dog', 'cat', 'bird'], 'age': [1, 2, 1],
'owner': ['jacky', 'tom', 'terry']}
data = pd.DataFrame(data)
new_data = pd.crosstab(data['owner'], data['animal'])
print(new_data)
方法较为拙略,还需继续努力。