切片索引必须具有__index__方法

时间:2018-01-07 11:41:26

标签: python pandas

我在一个必须使用Pandas包的项目上工作,运行时遇到了这个错误:

TypeError: slice indices must be integers or None or have an __index__ method 

所以我的程序如下所示:

v_features = df.ix[:,1:29].columns

for i, cn in enumerate(df[v_features]):
    sns.distplot(df[cn][df.Class == 1], bins=50)
    sns.distplot(df[cn][df.Class == 0], bins=50) 

功能包含以下内容:

 Index(['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11',
   'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21',
   'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28'],
  dtype='object') 

我不知道我在哪里弄乱我的代码

1 个答案:

答案 0 :(得分:1)

我遇到同样的问题,解决方案来自this

  

conda install -c conda-forge statsmodels

然后使用:

a = df.loc[df.Class == 1, df.columns[1:29]]
b = df.loc[df.Class == 0, df.columns[1:29]]

for x in range(28):
    sns.distplot(a.iloc[:, x], bins=50)
    sns.distplot(b.iloc[:, x], bins=50)

样品:

np.random.seed(234)
cols = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11',
   'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21',
   'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28']
df = pd.DataFrame(np.random.randint(10, size=(10, 28)), columns=cols)
df['Class'] = df['V1'].gt(4).astype(int)

#print (df)

a = df.loc[df.Class == 1, df.columns[1:29]]
b = df.loc[df.Class == 1, df.columns[1:29]]


for x in range(28):
    sns.distplot(a.iloc[:, x], bins=50)
    sns.distplot(b.iloc[:, x], bins=50)