我记得在使用R语言时,我使用了.factor(我认为它们是带有层次的因子),但在Python中我不知道如何操作。
我曾经使用过get_dummies,但当训练数据集中有测试集中没有的值时,会出现问题,从而生成的列数超过了机器学习算法所能接受的数量。
我需要转换以下列:
train.head(5) Id MSSubClass MSZoning 1 60 RL 2 53 RR 3 49 RL 4 60 RL 5 95 RR 6 16 RR 6 16 R1
我需要将train.MSZoning转换成如下形式:
MSZoning 1 2 1 1 2 2 3
谢谢。
回答:
你可以使用pd.Categorical
。以下是一个最小可复现的示例
import pandas as pd data = [[1, 60, 'RL'], [2, 53, 'RR'], [3, 49, 'RL'], [4, 60, 'RL'], [5, 95, 'RR']] df = pd.DataFrame(data, columns = ['Id', 'MSSubClass', 'MSZoning']) df['MSZoning_factor'] = pd.Categorical(df.MSZoning).codes + 1df# Id MSSubClass MSZoning MSZoning_factor#0 1 60 RL 1#1 2 53 RR 2#2 3 49 RL 1#3 4 60 RL 1#4 5 95 RR 2
或者使用pd.factorize
df['MSZoning_factor'] = pd.factorize(df.MSZoning)[0] + 1
结果相同。