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

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)

错误截图

AttributeError错误截图

解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:35:29