熊猫将所有字符串变成数字(一个热编码)进行回归



我正在尝试使用看起来像这样的预处理数据:

train.head(4)
    Id  MSSubClass  MSZoning    LotFrontage LotArea Street  Alley   LotShape    LandContour Utilities   ... PoolArea    PoolQC  Fence   MiscFeature MiscVal MoSold  YrSold  SaleType    SaleCondition   SalePrice
0   1.0 60.0    RL  65.0    8450    Pave    NaN Reg Lvl AllPub  ... 0   NaN NaN NaN 0   2   2008    WD  Normal  208500
1   2.0 20.0    RL  80.0    9600    Pave    NaN Reg Lvl AllPub  ... 0   NaN NaN NaN 0   5   2007    WD  Normal  181500
2   3.0 60.0    RL  68.0    11250   Pave    NaN IR1 Lvl AllPub  ... 0   NaN NaN NaN 0   9   2008    WD  Normal  223500
3   4.0 70.0    RL  60.0    9550    Pave    NaN IR1 Lvl AllPub  ... 0   NaN NaN NaN 0   2   2006    WD  Abnorml 140000
4 rows × 81 columns

我必须找到一种将这些字符串变成数字的方法,以便我可以将它们用于回归。我还知道,如果我简单地编号,我可能会引入错误的距离逻辑(不是一个热编码(。有人知道一种明智的方法吗?

n

您可以尝试pandas.get_dummies()来编码分类数据。您可以在此处查看文档。它不会转换您的整数值(即它将使他们完整。

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                    'C': [1, 2, 3]})
pd.get_dummies(df, prefix=['col1', 'col2'])
   C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1

如果分类特征的数量较大,并且每个分类的唯一值的数量也很大,则可以尝试Scikit-Learn的Distvectorizer。请参阅此处的文档。

您可以检查此链接以查看基于算法使用的编码。

最新更新