python функция не работает, вызывая функцию из цикла - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь вызвать функцию, но безуспешно, цель - запустить правила для проверки разделения обязанностей

per=pd.read_excel('Permissionwp.xlsx',sheet_name='Sheet1')
def take_first(elem):
        return elem[0]
def sod(permissiona,permissionb):
        rsod=[]
        ls1=[]
        ls2=[]

    for i in  range(len(per)):
        if per.iloc[i,5]==permissiona:
            ls1.append((per.iloc[i,1],per.iloc[i,4]))

        else:
            pass

    for i in  range(len(per)):
        if per.iloc[i,5]==permissionb:
            ls2.append((per.iloc[i,1],per.iloc[i,4]))

        else:
            pass
    for user in ls1:
        if user in ls2:
             rsod.append(user)
             rsod=list(set(rsod))   

    for i in sorted(rsod,key=take_first):
        print(i)

проблема ниже - я пытаюсь вызов функции sod путем запуска файла правил с использованием sod не дает мне результата, а скорее «Нет»

l=()
count=0
risk=pd.read_excel('risk.xlsx',sheet_name='Sheet1')
for num in range(len(risk)):

    sod(risk.iloc[num,4],risk.iloc[num,5])   

здесь проблема

1 Ответ

1 голос
/ 05 марта 2020

Что касается вопроса: уверены ли вы, что последние условия в вашей функции rsod и что список rsod не пуст? Кроме того, когда вы указали «None», вы имели в виду, что напечатанный вывод - «None»?

Замечание по поводу кода: кажется, что для каждого типа объекта является DataFrame, поэтому использование всех этих для циклов, вероятно, не очень эффективный. Вместо этого вы должны применять команды векторизации непосредственно к вашему DataFrame, превращая каждую для l oop в один слой.

Вы можете прочитать о различных способах l oop a DataFrame здесь: https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...