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]
。 :)
这是我在这里问的第一个问题,所以我希望我能说清楚:)
所以我正在尝试编写一个离群值函数,它有 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]
。 :)