Записать вывод функции в датафрейм

введите сюда описание изображенияЯ рассчитываю корреляции между несколькими переменными:

import pandas as pd
from scipy import stats

data = {'первый' : [12, 17, 56, 87, 35],
        'второй' : [33, 34, 23, 61, 38],
        'третий' : [11, 42, 47, 12, 14],
        'четвертый' : [10, 3, 76, 87, 23],
        'пятый' : [24, 51, 43, 32, 55]}
frame = pd.DataFrame(data)
stats.spearmanr(frame)

И хочу все это сохранить в табличном виде в экселе, т.к. в консоли немного нечитаемо. Но методом pd.DataFrame() почему-то не получается, либо я что-то не так делаю. Помогите, пожалуйста.

П.С. А еще большая благодарность тому, кто подскажет, как соединить correlation и pvalue в одну ячейку, чтоб рядом со значениями корреляций в квадратах выводился уровень значимости (например, если pvalue<=0.05, то рядом с числом выводится одна звездочка "*", а если pvalue<=0.01, то две звездочки "**"). Ну или хотя бы чтоб просто выводились только значимые значения, у которых уровень значимости pvalue<=0.05.


Ответы (1 шт):

Автор решения: CrazyElf

Ну я довольно тупо "влоб" вот набросал. Наверняка можно как-то более красиво:

s = stats.spearmanr(frame)
sx, sy = s.correlation.shape
m = []
for y in range(sy):
    row = []
    for x in range(sx):
        z = f'{s.correlation[y,x]:.2f}'
        if s.pvalue[y,x] < 0.01:
            z += '**'
        elif s.pvalue[y,x] < 0.05:
            z += '*'
        row.append(z)
    m.append(row)

df_corr = pd.DataFrame(m)
df_corr.columns = frame.columns
df_corr.index = frame.columns
df_corr

Вывод:

          первый    второй  третий  четвертый   пятый
первый      1.00**  0.40    0.30    0.90*   0.10
второй      0.40    1.00**  -0.40   0.30    0.20
третий      0.30    -0.40   1.00**  0.00    0.60
четвертый   0.90*   0.30    0.00    1.00**  -0.20
пятый       0.10    0.20    0.60    -0.20   1.00**
→ Ссылка