PyCaret异常检测setup()报错:AttributeError问题求助
PyCaret异常检测setup()报错:AttributeError: 'DataFrame' object has no attribute 'unique'
问题描述
使用PyCaret执行异常检测时,只要数据集中包含分类变量,运行setup()函数就会触发以下错误:
AttributeError: 'DataFrame' object has no attribute 'unique'
复现代码
import pandas as pd from pycaret.anomaly import setup data = pd.read_csv('https://raw.githubusercontent.com/numenta/NAB/master/data/realKnownCause/nyc_taxi.csv') data['timestamp'] = pd.to_datetime(data['timestamp']) data.set_index('timestamp', drop=True, inplace=True) # 按小时重采样时间序列 data = data.resample('H').sum() # 从日期生成特征 data['day'] = [i.day for i in data.index] data['day_name'] = [i.day_name() for i in data.index] data['day_of_year'] = [i.dayofyear for i in data.index] data['week_of_year'] = [i.weekofyear for i in data.index] data['hour'] = [i.hour for i in data.index] data['is_weekday'] = [i.isoweekday() for i in data.index] s = setup(data, session_id = 123)
错误截图

解决方案
1. 显式指定分类特征
在setup()中明确声明分类列,避免PyCaret自动推断时出现逻辑错误:
s = setup(data, session_id=123, categorical_features=['day_name'])
2. 更新PyCaret至最新版本
该错误大概率是旧版本的已知bug,通过更新修复:
pip install --upgrade pycaret
3. 提前转换分类变量为数值型
如果无需保留分类标签,可提前对分类列做编码处理:
# 标签编码day_name列 data['day_name'] = pd.factorize(data['day_name'])[0] # 执行setup s = setup(data, session_id=123)
4. 验证数据索引合法性
确保数据集使用单级索引,避免PyCaret处理时混淆维度:
print(data.index.nlevels) # 输出应为1,若大于1需重置索引
内容的提问来源于stack exchange,提问作者vraka0723
相关产品推荐
相关产品推荐

