Pandas 将所有字符串转换为数字(一个热编码)以进行回归
我正在尝试预处理如下所示的数据:Pandas 将所有字符串转换为数字(一个热编码)以进行回归,pandas,scikit-learn,regression,preprocessor,Pandas,Scikit Learn,Regression,Preprocessor,我正在尝试预处理如下所示的数据: 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
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()
对分类数据进行编码。您可以查看文档。它不会转换你的整数值(也就是说,它会保持整数值不变。参见官方文档中的这个例子)
如果分类功能的数量很大,并且每个分类的唯一值的数量也很大,您可以尝试Scikit learn的DictVectorizer。请参阅文档
您可以根据算法检查要使用的编码。标签编码?sklearn
pd.获得假人(火车)
首先,非常感谢!我是否可以假设此命令会自动识别何时“需要”,因此不会转换非常精细的整数?它也会转换整数。这可能是一个愚蠢的问题,但是否有内部逻辑导致两个数据帧在具有相同值的情况下以相同的方式进行转换。也就是说,如果我把一个测试和一个火车组转换成那样,它们以后也会有相同的值吗?这不是一个愚蠢的问题:-)。你的假设是正确的。如果两个数据帧中的值相同,则它们将以相同的方式进行转换。但是只需确保火车和测试具有相同的唯一分类值。一个更好的办法是在执行get_假人操作后分为训练和测试。
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