ValueError: объект слишком глубокий для нужного массива при использовании кросс-корреляции - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь исследовать взаимную корреляцию двух фреймов данных. Код приведен здесь:

df1 = pd.DataFrame({"A":[1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]})
df2 = pd.DataFrame({"A":[7191, 7275, 9889, 9934, 9633, 9924, 9650, 9341, 8820, 8784, 8869]})

np.correlate(df1, df2)

Но я получаю эту ошибку:

https://imgur.com/PIOXwND

Есть идеи?

Ответы [ 2 ]

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

Вы получаете эту ошибку при передаче в виде кадра данных, который является 2D. np.correlate для взаимной корреляции двух одномерных последовательностей. Поэтому попробуйте.

np.correlate(df1.squeeze(), df2.squeeze())

, который выводит array([80556], dtype=int64).


Редактировать

В зависимости от вашего предложения, попробуйте

# You will need to change your column names, like 
df1 = pd.DataFrame({"A":[1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]})
df2 = pd.DataFrame({"B":[7191, 7275, 9889, 9934, 9633, 9924, 9650, 9341, 8820, 8784, 8869]})

df1.join(df2).corr()

, который выходные данные

            A           B
A   1.000000    -0.174287
B   -0.174287   1.000000

Как указано в комментариях piRSquared, вы также можете использовать df1.corrwith(df2) для возврата одного значения.

0 голосов
/ 13 марта 2020

Другая опция использует scipy.stats функцию pearsonr. Итак, после импорта:

pearson = pearsonr(df1['A'].values,df2['A'].values)
...