在 DataFrameMapper 中显式删除列
Posted
技术标签:
【中文标题】在 DataFrameMapper 中显式删除列【英文标题】:Dropping a column explicitly in DataFrameMapper 【发布时间】:2020-08-29 18:01:44 【问题描述】:考虑以下人工数据:
data = pd.DataFrame('pet':['cat', 'dog', 'dog', 'fish',
'cat', 'dog', 'cat', 'fish'],
'children': [4., 6, 3, 3, 2, 3, 5, 4],
'salary': [90., 24, 44, 27, 32, 59, 36, 27])
在 sklearn ColumnTransformer
中,我可以通过将 'drop'
指定为转换器来删除我想要的任何列,如下所示:
clmn_trnsfrmr = ColumnTransformer([
('clmn_drpr', 'drop', ['pet'])]),
('scale', StandardScaler(), ['salary']),
'passthrough'])
sklearn-pandas
DataFrameMapper
中是否有类似的方法来删除正是我想要的列?
【问题讨论】:
【参考方案1】:文档 https://pypi.org/project/sklearn-pandas/1.5.0/ 说 “仅保留 DataFrameMapper 中列出的列。要保留列但不对其应用任何转换,请使用 None 作为转换器”,所以不要列出要删除的列。
【讨论】:
但如果您打算将default=None
传递给大量列,那将不起作用。这将通过任何未明确列出的列。我可以使用 default=False
删除任何未列出的列,但如果您有大量列,则将所有列及其转换器列为 None 是不可行的。
我明白了。那么为什么不在已经删除了不相关列的 DataFrame 上工作呢?或者,如果它们是其他多列转换的一部分,则可以将转换分解为几个步骤。
我这样做是为了让我可以很容易地看到删除或不删除列并将转换应用于管道中的列的效果。它有点成为我在网格搜索中预处理管道的超参数。这种方式更加方便和有用。
我们有什么解决办法吗?我还遇到过一个用例,在对它们执行一些操作以创建新功能后,我需要删除一些旧功能。以上是关于在 DataFrameMapper 中显式删除列的主要内容,如果未能解决你的问题,请参考以下文章