Featuretools 1.0.0中向dfs传递cutoff_time的正确方法
报错根因
Featuretools v1.0.0版本开始深度集成Woodwork作为类型系统,虽然官方文档标注支持直接传入pandas DataFrame格式的cutoff_time,内部会自动完成Woodwork schema初始化,但自动初始化逻辑对cutoff_time的列顺序、列类型兼容性要求较高,一旦初始化失败就会导致cutoff_time.ww.schema为None,触发'NoneType' object has no attribute 'logical_types'报错。
正确传参方式
基础要求(自动初始化场景)
调用dfs前先确认cutoff_time符合以下规则,即可直接传入pandas DataFrame:
- 列顺序严格遵循:第一列为时间列,第二列为instance_id列,后续列依次为需要透传的历史特征、目标列
- 时间列已转换为pandas datetime类型
- 无全空列、列名无重复
稳妥解决方案(手动初始化Woodwork)
如果调整后仍触发报错,直接在调用dfs前手动初始化cutoff_time的Woodwork schema即可,不需要修改其他dfs传参逻辑,示例代码如下:
import woodwork as ww # 初始化Woodwork元信息 cutoff_time.ww.init( time_index="time", # 替换为实际时间列名 index=None, # cutoff_time不需要全局唯一索引,固定设为None即可 # 可选:手动指定列类型,避免自动推断出错,按需填写 logical_types={ "instance_id": "Integer", "feature1": "Double", "feature2": "Categorical", "target": "Integer" } )
关于是否为代码bug
该问题是Featuretools v1.0.0~v1.3.0版本的已知兼容问题,不属于功能性bug,本质是自动类型推断逻辑对边缘场景的覆盖不足,手动初始化Woodwork schema即可完全规避。
内容的提问来源于stack exchange,提问作者Иван Липатов
相关产品推荐
相关产品推荐

