Featuretools - 无法在 Entityset 中添加关系

Featuretools - unable to add relationship in Entityset

我正在使用 this data from Kaggle 编写笔记本。这是两个 table 的屏幕截图,只是为了显示我们在两者中都有 ID 列。

这是我尝试设置实体集并添加关系时的代码。

import featuretools as ft 
import pandas as pd

es = ft.EntitySet()
es = es.add_dataframe(dataframe=train_sampled, index='new_index', dataframe_name='application', make_index=True)
es = es.add_dataframe(dataframe=bureau, index='new_index', dataframe_name='bureau', make_index=True)

new_relationship = ft.Relationship(entityset=es,parent_dataframe_name='application',parent_column_name='SK_ID_CURR',
                    child_dataframe_name='bureau',child_column_name='SK_ID_CURR')
es = es.add_relationship(new_relationship)

这是我收到的错误,没有任何意义。

KeyError: 'DataFrame <Relationship: bureau.SK_ID_CURR -> application.SK_ID_CURR> does not exist in entity set'

Entityset 存在但无法添加关系,这就是重点所在。

非常感谢任何建议或指导。

编辑:解决方案 此代码使用下面的答案加上将局 table 中的索引列更改为唯一的正确索引列。

es = ft.EntitySet()
es = es.add_dataframe(dataframe=train_sampled, index='SK_ID_CURR', dataframe_name='application', make_index=False)
es = es.add_dataframe(dataframe=bureau, index='SK_ID_BUREAU', dataframe_name='bureau', make_index=False)

new_relationship = ft.Relationship(entityset=es,parent_dataframe_name='application',parent_column_name='SK_ID_CURR',
                    child_dataframe_name='bureau',child_column_name='SK_ID_CURR')
es = es.add_relationship(relationship=new_relationship)

如果您通过传入 Relationship 对象向 EntitySet 添加关系,则需要确保在调用中使用 relationship 关键字,如下所示:

es.add_relationship(relationship=new_relationship)

在不使用 relationship 关键字的情况下,该方法需要您传入四个值,分别表示 parent_dataframe_nameparent_column_namechild_dataframe_namechild_column_name .使用这种方法,您也可以跳过创建 Relationship 对象并添加如下关系:

es.add_relationship('application', 'SK_ID_CURR', 'bureau', 'SK_ID_CURR')

最后,您还可以使用 EntitySet.add_relationships 方法来添加您的关系,它允许您通过传入 Relationship 的列表来向 EntitySet 添加一个或多个关系对象:

es.add_relationships([new_relationship])

有关所有这些方法和预期参数的更多详细信息,您可以随时参阅 Featuretools API Reference