使用 FeatureTools 到带有时间戳的 normalize_entity 时无法转换列

Posted

技术标签:

【中文标题】使用 FeatureTools 到带有时间戳的 normalize_entity 时无法转换列【英文标题】:Cannot convert column when using FeatureTools to normalize_entity with timestamps 【发布时间】:2018-11-22 01:07:36 【问题描述】:

我正在尝试使用 FeatureTools 来规范化表以进行特征合成。我的表类似于 Max-Kanter 对How to apply Deep Feature Synthesis to a single table 的回复。我遇到了一个异常,希望能得到一些帮助。

异常源自featuretools.entityset.entity.entityset_convert_variable_type,它似乎无法处理时间类型。

异常的性质是什么,我可以解决它吗?

桌子,df

PatientId | AppointmentID | Gender | ScheduledDay | AppointmentDay | Age | Neighbourhood | Scholarship | Hipertension | Diabetes | Alcoholism | Handcap | SMS_received | No-show
12345     | 5642903       | F     | 2016-04-29    | 2016-04-29     | 62  | JARDIM DA     | 0           | 1            | 0        | 0          | 0       | 0            | No
67890     | 3902943       | M     | 2016-03-18    | 2016-04-29     | 44  | Other Nbh     | 1           | 1            | 0        | 0          | 0       | 0            | Yes
...

我的代码:

appointment_entity_set = ft.EntitySet('appointments')
appointment_entity_set.entity_from_dataframe(
    dataframe=df, entity_id='appointments',
    index='AppointmentID', time_index='AppointmentDay')

# error generated here
appointment_entity_set.normalize_entity(base_entity_id='appointments',
    new_entity_id='patients',
    index='PatientId')

ScheduledDay 和 AppointmentDay 是 pandas._libs.tslib.Timestamp 类型,就像 Max-Kanter's response 中的情况一样。

例外:

~/.virtualenvs/trane/lib/python3.6/site-packages/featuretools/entityset/entity.py in entityset_convert_variable_type(self, column_id, new_type, **kwargs)
    474         df = self.df
--> 475         if df[column_id].empty:
    476             return
    477         if new_type == vtypes.Numeric:

Exception: Cannot convert column first_appointments_time to <class 'featuretools.variable_types.variable.DatetimeTimeIndex'>

featuretools==0.1.21

这个数据集来自Kaggle Show or No Show competition

【问题讨论】:

【参考方案1】:

出现的错误似乎是熊猫读取AppointmentDay 变量的方式有问题。我们实际上有一个带有该数据集的示例Kaggle kernel。在那里,我们需要使用pandas.read_csvparse_dates

data = pd.read_csv("data/KaggleV2-May-2016.csv", parse_dates=['AppointmentDay', 'ScheduledDay'])

这将返回一个熊猫系列,其值为numpy.datetime64 类型。这应该可以很好地加载到 Featuretools。

另外,你能确定你有来自 pip 的最新版本的 Featuretools 吗?该堆栈跟踪中有一个 set trace 命令不在最新版本中。

【讨论】:

谢谢你,@max-kanter。那是完美的。另外,感谢您指出示例。我不知道。我删除了pdb 行。对于那个很抱歉。我已经在本地介绍了它,看看发生了什么。

以上是关于使用 FeatureTools 到带有时间戳的 normalize_entity 时无法转换列的主要内容,如果未能解决你的问题,请参考以下文章

将 NSMutableArray 保存到带有时间戳的文件?

无法保存带有时间戳的新文件

如何以自定义格式加载带有时间戳的 CSV?

macOS:SwiftUI:MenuItem 用于截取 WKWebView 的屏幕截图并将其保存到带有时间戳的 ~/Pictures?

带有时间戳的 JPA @Convert 问题

Sqoop 带有 Epoch 时间戳的增量负载