Python 在Featuretools中创建实体集错误类型错误:';str';对象不支持项分配

Python 在Featuretools中创建实体集错误类型错误:';str';对象不支持项分配,python,featuretools,Python,Featuretools,我有3个数据帧: df_train cortado:____________________ SK_ID_CURR TARGET NAME_CONTRACT_TYPE_Cash loans \ 0 100002 1 1 1 100003 0 1 2 100004 0

我有3个数据帧:

df_train cortado:____________________ 
    SK_ID_CURR  TARGET  NAME_CONTRACT_TYPE_Cash loans  \
0      100002       1                              1   
1      100003       0                              1   
2      100004       0                              0   
3      100006       0                              1   
4      100007       0                              1   

   NAME_CONTRACT_TYPE_Revolving loans  CODE_GENDER_F  CODE_GENDER_M  
0                                   0              0              1  
1                                   0              1              0  
2                                   1              0              1  
3                                   0              1              0  
4                                   0              0              1  

df_bureau cortado:____________________ 
    SK_ID_CURR  SK_ID_BUREAU  CREDIT_ACTIVE_Active
0      100002       5714464                     1
1      100002       5714465                     1
2      215354       5714466                     1
3      215354       5714467                     1
4      215354       5714468                     1

bureau_balance cortado 3:____________________ 
    SK_ID_BUREAU  MONTHS_BALANCE  STATUS_C
0       5715448               0         1
1       5715448              -1         1
2       5715448              -2         1
3       5715448              -3         1
4       5715448              -4         1 
这是我试图运行的脚本,用于功能合成:

entities = {
    "train"          : (df_train,         "SK_ID_CURR"),
    "bureau"         : (df_bureau,        "SK_ID_BUREAU"),
    "bureau_balance" : (df_bureau_balance,"MONTHS_BALANCE", "STATUS", "SK_ID_BUREAU")                       , 
    }

relationships = [
    ("bureau", "SK_ID_BUREAU", "bureau_balance", "SK_ID_BUREAU"),
    ("train", "SK_ID_CURR", "bureau", "SK_ID_CURR")
             ]

feature_matrix_customers, features_defs = ft.dfs(entities=entities,
                                             relationships=relationships,
                                             target_entity="train"
                                             )
但是,当我引入“状态”列时,会发生以下错误: TypeError:“str”对象不支持项分配

如果我不放“STATUS”列,那么数据框中只有几行就可以了。 当行数增加时(只有将STATUS设置为key才能解决此问题),会发生另一个错误: AssertionError:索引在数据帧上不是唯一的(实体平衡)


提前谢谢

您是对的,数据帧需要一个唯一的索引才能成为一个实体。一个简单的选择是使用

df\u bureau\u balance.reset\u index(inplace=True)

然后使实体:

entities = {
    "train"          : (df_train,         "SK_ID_CURR"),
    "bureau"         : (df_bureau,        "SK_ID_BUREAU"),
    "bureau_balance" : (df_bureau_balance, "index")
    }
一个更好的选择是。当我们从
df_bureau_balance
创建一个实体时,因为它没有唯一的索引,所以我们传入
make_index=True
和索引的名称(如果它不是数据中的一列,则可以是任何名称)。其余的与您的工作非常相似,只是语法略有不同!下面是一个完整的工作示例:

# Create the entityset
es = ft.EntitySet('customers')

# Add the entities to the entityset
es = es.entity_from_dataframe('train', df_train, index = 'SK_ID_CURR')
es = es.entity_from_dataframe('bureau', df_bureau, index = 'SK_ID_BUREAU')
es = es.entity_from_dataframe('bureau_balance', df_bureau_balance, 
                               make_index = True, index = 'bureau_balance_index')

# Define the relationships
r_train_bureau = ft.Relationship(es['train']['SK_ID_CURR'], es['bureau']['SK_ID_CURR'])
r_bureau_balance = ft.Relationship(es['bureau']['SK_ID_BUREAU'], 
                                   es['bureau_balance']['SK_ID_BUREAU'])

# Add the relationships
es = es.add_relationships([r_train_bureau, r_bureau_balance])

# Deep feature synthesis
feature_matrix_customers, feature_defs = ft.dfs(entityset=es, target_entity = 'train')

Entitysets可帮助您在单个结构中跟踪所有数据!这有助于了解使用EntitySet的基本知识,我建议您阅读一下。

caseWestern的回答是在Featuretools中创建
EntitySet
的推荐方法

也就是说,您看到的错误是因为Featuretools期望实体的4个值,其中变量类型是dictionary dict[str->variable]。现在,您只为第4个参数传入一个字符串,因此Featuretools在尝试添加条目时失败,因为它实际上不是字典


有关更多信息,请参见。

只是一个有用的提示:使用entityset运行深度功能合成要容易得多。用于制作实体集。没问题!实际上,我在完全相同的数据集(Kaggle)上使用Featuretools。我写了一篇关于在这个数据集上使用Featuretools的指南,你可以找到。