You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多次运行FeatureTools生成复杂特征时遇ValueError的解决方法

问题解决:FeatureTools多层级特征生成报错处理

报错原因

第一次运行ft.dfs()后返回的feature_matrix是Woodwork DataFrame(FeatureTools内置的增强型DataFrame),第二次循环中将其添加到EntitySet时,该Woodwork DataFrame未设置名称,触发ValueError: Cannot add a Woodwork DataFrame to EntitySet without a name错误。

修复方案

有两种简单的修复方式,任选其一即可:

方案1:将Woodwork DataFrame转换为普通Pandas DataFrame

每次生成特征后,把结果转回普通DataFrame,避免Woodwork的属性冲突。修改循环内的代码:

feature_matrix, feature_defs = ft.dfs(entityset = es, target_dataframe_name = dataframe_name,
                                      trans_primitives = trans_primitives)
# 添加这一行,转换为普通Pandas DataFrame
feature_matrix = feature_matrix.reset_index(drop=True).astype('float64')

(reset_index是为了避免索引名称重复,astype确保数据类型统一)

方案2:添加Woodwork DataFrame时指定名称

在add_dataframe时,通过woodwork参数显式设置Woodwork DataFrame的名称,匹配当前的dataframe_name:

es = es.add_dataframe(
    dataframe_name=dataframe_name,
    dataframe=feature_matrix,
    index="index" + str(i),
    # 添加这一行,指定Woodwork DataFrame的名称
    woodwork={"name": dataframe_name}
)

完整修复后的代码示例

以方案1为例,修改后的完整函数:

import featuretools as ft

def multi_level_feature_creation(X, trans_primitives_per_level): 
    feature_matrix = X

    for i, trans_primitives in enumerate(trans_primitives_per_level):
        print("Level: ", i)
        print("Columns: ", feature_matrix.columns)
    
        es = ft.EntitySet(id = 'dataset')
        dataframe_name = "data" + str(i)
    
        es = es.add_dataframe(
            dataframe_name=dataframe_name,
            dataframe=feature_matrix,
            index="index" + str(i)
        )        

        feature_matrix, feature_defs = ft.dfs(
            entityset=es, 
            target_dataframe_name=dataframe_name,
            trans_primitives=trans_primitives
        )
        # 转换为普通Pandas DataFrame,避免Woodwork属性冲突
        feature_matrix = feature_matrix.reset_index(drop=True).astype('float64')
        
    return feature_matrix, feature_defs

# 后续调用代码不变
X = df.drop(["target"], axis=1)
y = df["target"]

features_per_level = [ 
    ['add_numeric', 'multiply_numeric', 'subtract_numeric', 'divide_numeric', 'multiply_numeric_scalar'],
    ['add_numeric', 'multiply_numeric', 'subtract_numeric', 'divide_numeric', 'multiply_numeric_scalar']
]

feature_matrix, feature_defs = multi_level_feature_creation(X, features_per_level)
print(type(feature_matrix))
feature_matrix.head()

验证效果

修改后运行多层级特征生成,即可正常生成(a-b)/c、(a-b)/a这类复合运算特征,不会再触发名称相关的错误。

内容的提问来源于stack exchange,提问作者Hyphen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:15:30