Функция в функции, возвращающая «TypeError: неподдерживаемые типы операндов для +: 'int' и 'NoneType'" - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь получить движущийся средний в DataFrame (df).

Код, который я написал, делает именно то, что я хочу, но это только для 5 строк. см. ниже:

def movingavarage (df,column, avg,remark):
    for i in range(0, df.shape[0] - avg):
        df.loc[df.index[i + avg],'SMA_5'] = np.round(((
        df.iloc[i + 0, column] +
        df.iloc[i + 1, column] +
        df.iloc[i + 2, column] +
        df.iloc[i + 3, column] +
        df.iloc[i + avg - 1, column]) /
        avg),1)

    return output(df, remark)

Я хотел бы сделать то же самое для 200 строк, и я не думаю, что мне нужно копировать предыдущий код "df.iloc [i + ', i,', testcolumn] + 200 раз.

Так создана функция, которая помогает мне со средним битом кода. См. Ниже код и вывод:

ввод:

def loc (max):
    for i in range (0, max, 1):
        if i != max - 1:
            x = print ('df.iloc[i +',i,', testcolumn] +')
        elif i == max - 1:
            x = print ('df.iloc[i +',i,', testcolumn] ')
    return x

loc (4)

вывод:

df.iloc[i + 0 , testcolumn] +
df.iloc[i + 1 , testcolumn] +
df.iloc[i + 2 , testcolumn] +
df.iloc[i + 3 , testcolumn] 

Это работает , но как мне объединить эти два?

Я пробовал несколько вариантов, но это постоянно дает мне ошибку:

File "/functions.py", line 45, in movingavarage2
    loc (4) +
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Объединенный код выглядит следующим образом:

def movingavarage2 (df,column, avg,remark):
    for i in range(0, df.shape[0] - avg):
        df.loc[df.index[i + avg],'SMA_5'] = np.round(((
        loc (4) +
        df.iloc[i + 4, column])/avg),1)

    return output(df, remark)
...