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_name
、parent_column_name
、child_dataframe_name
、child_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
我正在使用 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_name
、parent_column_name
、child_dataframe_name
、child_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