ValueError: невозможно скопировать последовательность с размером 0 на ось массива с измерением 56 - PullRequest
0 голосов
/ 07 декабря 2018

Я получил следующие 56 столбцов, заполненных случайными числами:

dataframe

Я хочу добавить дополнительный столбец с автокорреляциейколонка 1-56 с определенной задержкой.Таким образом, если задержка равна 1, то результат равен 0,42, когда задержка равна 2, 0,06 и т. Д.

Это код, который я использую:

def autocorr(x, t):
return np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]]))

где, я полагаю,x - это кадр данных, а t - это задержка.

Однако, когда я пытаюсь добавить столбец с автокорреляцией с lag = 1, я получаю:

df["output"] = autocorr(df,1)

error: ValueError: notскопировать последовательность с размером 0 на ось массива с размером 56

Что я делаю не так или есть более простой способ расчета автокорреляции с определенной задержкой?

Оцените помощь

Стивен

обновление: я постоянно пытаюсь настроить, но не могу найти его.Кто-нибудь ?????

Я попробовал следующий код:

def autocorr(x, t):
return np.corrcoef(np.array([x[:len(x)-t], x[t:len(x)]]))

Но это дает мне ошибку:

Файл "", строка 1 autocorr (df (axis = 1,1)) ^ SyntaxError: позиционный аргумент следует за ключевым аргументом

1 Ответ

0 голосов
/ 07 декабря 2018

Похоже, вы не соответствовали скобкам в вызове функции.Если что-то autocorr(df(axis=1, 1)) должно быть autocorr(df(axis=1), 1), но pd.DataFrame объекты не могут быть вызваны.

Не дает ли функция pd.Series.autocorr(lag=1) того, чего вы хотите?

import pandas as pd, numpy as np
series = pd.Series(np.random.randint(100, high=200, size=56))
print(series.autocorr(lag=1))

приводит к значениямпохоже на то, что вы ожидали.

Обновление: Относительно вашей исходной проблемы: поскольку у вас есть одна строка, len(x) равен 1, а x[0:len(x)-1] - пустой массив!Плюс: в этом случае np.corrcoef возвращает матрицу 2x2 вида [[1, C], [C, 1]].Ваша функция autocorr работает при таком вызове

df1 = df.copy(deep=True) 
df1["output"] = autocorr(df.T[0], 1)[0, 1]

Я бы не добавил результат к df, поскольку это изменило бы результат последующих вычислений.

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