Это самый первый вопрос, который я задаю здесь, поэтому я надеюсь, что я буду достаточно ясен:)
Итак, я пытаюсь написать функцию выброса, которая принимает 3 аргумента:
-df: фрейм данных Pandas
-L: список, содержащий некоторые из столбцов этого фрейма данных
-порог: порог, который мы можем выбрать, зная, что я использую метод 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 ... Кроме того, я мог бы действительно использовать любую помощь, чтобы решить мою проблему!
Заранее спасибо,
Alex
РЕДАКТИРОВАТЬ: У меня естьна самом деле не ясно, что я ожидал в качестве вывода.
Допустим, аргумент 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}]