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

使用Pandas遇TypeError:slice indices需为整数/None或含__index__方法

解决 TypeError: slice indices must be integers... 的问题

让我们一步步排查你的问题:

1. 弃用的 ix 索引器是首要问题

df.ix 在 pandas 1.0 版本就已经被完全弃用了,它的混合索引行为(同时支持位置和标签索引)经常会导致难以预料的错误,尤其是当你的列标签不是整数时。你应该用 iloc(纯位置索引)来替代它,因为你这里是按位置选取第1到28列:

# 替换弃用的 ix 为 iloc
v_features = df.iloc[:, 1:29].columns

2. 链式索引可能引发的隐性问题

你的代码中使用了链式索引 df[cn][df.Class == 1],这种写法可能会返回数据的副本而非视图,在某些情况下会导致索引混乱。推荐使用 loc 进行明确的行/列索引,这样更安全且可读性更好:

for i, cn in enumerate(v_features):  # 直接遍历v_features即可,无需遍历df[v_features]
    # 使用loc选取Class=1的行和当前特征列
    sns.distplot(df.loc[df.Class == 1, cn], bins=50)
    sns.distplot(df.loc[df.Class == 0, cn], bins=50)

另外,你不需要遍历 df[v_features],直接遍历 v_features 这个列名数组就足够了,这样代码更简洁。

3. 额外检查项

如果上面的修改后仍然报错,建议你做以下检查:

  • 确认 df.Class 列的数据类型是整数(int)或布尔值,而不是字符串或浮点数。如果是字符串,需要改成整数:df['Class'] = df['Class'].astype(int)
  • 确认所有特征列(V1到V28)都是数值型(float 或 int),没有字符串类型的数据。可以用 df[v_features].dtypes 查看每列的数据类型,如果有非数值列,需要做类型转换或处理。

这些修改应该能解决你遇到的切片索引错误,同时让代码更符合 pandas 的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:01