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
相关产品推荐
相关产品推荐

