假设我有以下df:
data = [{'c1':a, 'c2':x}, {'c1':b,'c2':y}, {'c1':c,'c2':z}]
df = pd.DataFrame(data)
Output:
c1 c2
0 a x
1 b y
2 c z
现在我想使用pd.get_dummies()对两个分类列c1和c2进行一次热编码,并删除每个列pd.get_dummies(df, columns = ['c1', 'c2'], drop_first=True)
的第一个类别。在不知道行的顺序的情况下,我如何决定删除哪个类别?我有没有漏掉什么命令?
**编辑:**所以我的目标是,例如,从c1
删除类别b
,从c2
删除类别z
Output:
a c x y
0 1 0 1 0
1 0 0 0 1
2 0 1 0 0
3条答案
按热度按时间42fyovps1#
一个技巧是将值替换为
NaN
s -这里每行删除一个值:如果每列需要多个remove值,请使用如下列表:
编辑:
如果每个列的值是唯一的,则在最后一步中将其删除:
nkoocmlb2#
我强烈推荐使用
sklearn
!https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html在安装了one hot编码器之后,您可以查看访问
<your_fitted_instance_name>.categories_
属性的类别,并且它还具有inverse_transform()
功能来反转one hot编码!至于列下降。默认值是不丢弃任何内容。但是,您可以使用
OneHotEncoder(drop='first')
来删除一个。编辑:还要注意的是,
sklearn
提供了Pipelines,可以帮助您在整个项目中确保一致的预处理!https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html8ulbf1ek3#
你可以
然后手动删除您不需要的级别: