尝试/例外问题Python 2.7

时间:2018-10-19 08:54:35

标签: python try-except

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

所以我正在尝试编写一个离群函数,该函数需要3个参数:

-df:一个熊猫数据框

-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的数字列)

-threshold = 2

这是Python2.7返回的内容:

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

尽管我什至不确定这是否与Try ...有关, 我真的可以使用任何帮助来解决我的问题!

先谢谢您

亚历克斯

编辑:我还没有真正弄清楚我期望什么作为输出。

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

所以L = ['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}]

1 个答案:

答案 0 :(得分:1)

for i in L:将在i中生成列名(字符串)(而不是索引!)。后来您有了L[i],这是多余的和错误的,并且“列表索引必须是整数,而不是str”的原因。

作为一个可以学习的时刻,现在是建议更好的变量命名的好时机-如果您写了for column_name in column_names:,那么写column_names[column_name]可能就不会发生了。 :)