无法添加关系,因为数据类型在 Featuretools 中不匹配

Unable to add relationship because dtypes don't match in Featuretools

尝试在 Featuretools 中添加两个实体之间的关系时出现以下错误

Unable to add relationship because ID in metadata is Pandas `dtype category` and ID in transactions is Pandas `dtype category`

注意,系列不一定相同cat.Codes

出现此错误是因为您尝试关联的分类变量之间的类别不同。在下面的代码示例中,所有 3 个系列都是分类的,但只有 ss2 具有相同的数据类型。

import pandas as pd
from pandas.api.types import is_dtype_equal

s = pd.Series(["a","b","a"], dtype="category")
s2 = pd.Series(["b","b","a"], dtype="category")
s3 = pd.Series(["a","b","c"], dtype="category")

is_dtype_equal(s.dtype, s2.dtype) # this is True
is_dtype_equal(s.dtype, s3.dtype) # this is False

要解决此问题,您需要在将数据框加载到 Featuretools 之前更新数据框,以确保 Pandas 分类具有相同的值类别值。这是你如何做到的

如果 s 缺少来自 s3

的类别
new_s = s.astype(s3.dtype)
is_dtype_equal(new_s.dtype, s3.dtype) # this is True

如果两个系列都缺少另一个系列的类别,我们必须合并这些类别

s4 = pd.Series(["b","c"], dtype="category")

categories = set(s.dtype.categories + s4.dtype.categories) # make union of categories

new_s = s.astype("category", categories=categories)
new_s4 = s4.astype("category", categories=categories)

is_dtype_equal(new_s.dtype, new_s4.dtype) # this is True