Попробуйте / исключите выпуск Python 2.7 - PullRequest
0 голосов
/ 19 октября 2018

Это самый первый вопрос, который я задаю здесь, поэтому я надеюсь, что я буду достаточно ясен:)

Итак, я пытаюсь написать функцию выброса, которая принимает 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}]

1 Ответ

0 голосов
/ 19 октября 2018

for i in L: сгенерирует имена столбцов (строки) в i (не индексы!).Позже у вас есть L[i], что является избыточным и неправильным, и причиной исключения "индексы списка должны быть целые числа, а не str".

В качестве обучающего момента самое время предложить более подходящую переменную.именование - если бы вы написали for column_name in column_names: вместо этого, вам, вероятно, не пришло бы в голову написать column_names[column_name].:)

...