Try/Except期Python2.7

Try/Except issue Python 2.7

这是我在这里问的第一个问题,所以我希望我能说清楚:)

所以我正在尝试编写一个离群值函数,它有 3 个参数:

-df: 一个 Pandas 数据帧

-L:包含此数据框的一些列的列表

-threshold:一个我们可以选择的阈值,知道我在这个函数中使用的是z_score方法。

这是我要实现的功能:

def out1(df,L,threshold):
    liste=[]
    for i in L:
        dico={}
        try:
            dico['Column Name']=i
            dico['Number of 
outliers']=len(np.where(np.abs(stats.zscore(df[L[i]])>threshold))[0])
            dico['Top 10 outliers']='a' #I'll fill this later
            dico['Exception']=None
        except Exception as e:
            dico['Exception']=str(e)
        liste.append(dico)
    return(liste)

我必须在这里使用一个例外,因为并非 df 的所有列都必须是数字的(因此 L 可以包含非数字的列名称),因此使用 z_score 是没有意义的方法并在这些列中查找异常值。

但是,我尝试运行此代码:

-df:我有一个简单的数据框

-L=['Terminations'](我的数据框 df 的数字列)

-阈值=2

这就是 Python2.7 returns:

Out[8]: 
[{'Column Name': 'Terminations',
  'Exception': 'list indices must be integers, not str'}]

虽然我什至不确定这是否与尝试有关...除了, 我真的可以使用任何帮助来解决我的问题!

提前谢谢你,

亚历克斯

编辑:我还没有真正说清楚我对输出的期望。

假设参数 L 只包含 1 个元素:

所以 L=['One column name of df']

此列要么是数字(所以我想应用 z_score 方法),要么不是(所以我想引发异常)。

如果此列为数字,则输出为:

[{'Column Name': 'One column name of df'; 'Number of outliers': xxx; 'Top 10 outliers': [I'll make it a liste later]; 'Exception': None}]

如果该列不是数字,则为:

[{'Column Name': 'One column name of df'; 'Number of outliers': None; 'Top 10 outliers: None, 'Exception': 'The column you chose is not numerical}]

for i in L: 将生成列名(字符串)到 i(不是索引!)。后来你有 L[i],这是多余的和错误的,也是 "list indices must be integers, not str" 异常的原因。

作为一个教学时刻,现在是建议更好的变量命名的好时机 - 如果你改为写 for column_name in column_names:,你可能不会想到写 column_names[column_name]。 :)