You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fastai.structured模块不存在报错及add_datepart功能替代方案咨询

安装旧版fastai失败的原因

fastai 0.7.0是2018年发布的老版本,仅兼容Python 3.6及更早版本,当前主流Python 3.7+环境下会存在依赖冲突,所以无法正常安装,不建议强行降级环境适配。

方案1:直接复用add_datepart原生源码

不用下载旧版整个structured模块,add_datepart函数本身逻辑独立,你可以直接把源码复制到自己的项目里直接调用,和旧版fastai的调用效果完全一致:

import re
import numpy as np
import pandas as pd

def add_datepart(df, fldname, drop=True, time=False):
    fld = df[fldname]
    fld_dtype = fld.dtype
    if isinstance(fld_dtype, pd.core.dtypes.dtypes.DatetimeTZDtype):
        fld_dtype = np.datetime64

    if not np.issubdtype(fld_dtype, np.datetime64):
        df[fldname] = fld = pd.to_datetime(fld, infer_datetime_format=True)
    targ_pre = re.sub('[Dd]ate$', '', fldname)
    attr = ['Year', 'Month', 'Week', 'Day', 'Dayofweek', 'Dayofyear',
            'Is_month_end', 'Is_month_start', 'Is_quarter_end', 'Is_quarter_start', 'Is_year_end', 'Is_year_start']
    if time: attr = attr + ['Hour', 'Minute', 'Second']
    for n in attr: df[targ_pre + n] = getattr(fld.dt, n.lower())
    df[targ_pre + 'Elapsed'] = fld.astype(np.int64) // 10 ** 9
    if drop: df.drop(fldname, axis=1, inplace=True)

调用方式和你原来的使用习惯完全一致,示例:add_datepart(你的数据框, '日期列名')。

方案2:用pandas手动实现等价功能

如果你不想引入额外的代码,也可以直接用pandas的dt属性手动提取需要的日期特征,灵活性更高,可以按需选择要生成的特征,示例代码如下:

import pandas as pd

# 假设你的日期列名为'date'
df['date'] = pd.to_datetime(df['date'])
# 提取常用日期特征
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['dayofweek'] = df['date'].dt.dayofweek
df['quarter'] = df['date'].dt.quarter
df['is_month_start'] = df['date'].dt.is_month_start.astype(int)
df['is_month_end'] = df['date'].dt.is_month_end.astype(int)

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:54:03