0

我正在使用来自 Kaggle 的这些数据编写笔记本。这是两个表的屏幕截图,只是为了显示我们在两个表中都有 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> 实体集中不存在'

实体集存在但不能添加关系,这就是重点。 在此处输入图像描述

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

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

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)
4

1 回答 1

2

如果您EntitySet通过传入Relationship对象来添加关系,则需要确保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来添加一个或多个关系:EntitySetRelationship

es.add_relationships([new_relationship])

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

于 2022-02-04T13:41:47.090 回答