Я рассчитываю корреляцию между столбцами в большой таблице, используя механизм Python в базе данных в SQL Server 2019, и, поскольку этот расчет возвращает диагональную матрицу, я хотел бы иметь возможность просматривать результаты в SSMS с помеченными строками, отражающими столбец имена.
Я знаю основы SQL-запросов, но не более того, поэтому, возможно, я не совсем точно формулирую свои запросы.
Вот пример моего кода:
execute sp_execute_external_script
@language = N'Python',
@script = N'
import pandas as pd
from pandas import DataFrame
df = InputDataSet.corr()
OutputDataSet = df
',
@input_data_1 = N'select GHI ,
MNO,
JKL
from PIVOTED_TIME_ID_MATRIX'
with result sets ((GHI float,
MNO float,
JKL float))
Это возвращает:
***** GHI | MNO | JKL
Row 1 1 0.5 0.5
Row 2 0.5 1 0.5
Row 3 0.5 0.5 1
и я хотел бы видеть:
***** GHI | MNO | JKL
GHI 1 0.5 0.5
MNO 0.5 1 0.5
JKL 0.5 0.5 1
Это возможно?
Да, он прекрасно выводится в окно консоли с помощью print(), но он не передает индекс фрейма данных в фактический набор результатов, где я могу сохранить вывод в CSV. Спасибо за предложение, однако, мне, возможно, придется найти способ использовать это в качестве обходного пути, если в SQL нет способа заставить индекс отражать столбцы. Просто пытаюсь максимально автоматизировать это для моей команды.
Попробуйте df.set_index(df.columns, inplace=True)
это должно сработать.
Спасибо @ResidentSleeper! В итоге я объединил это решение с обходным путем, чтобы получить результат, который мне нужен. Поскольку индекс DataFrame, по-видимому, не передается обратно в набор результатов в SSMS, я добавил результаты вызова df.columns в новый столбец, затем переместил его в начало DataFrame и добавил новый столбец в набор результатов.
В итоге я объединил приведенный выше совет по использованию df.columns, а также метод перестановки столбцов из здесь с обходным путем для получения нужного результата.
...'
df = InputDataSet.corr()
#puts the names of the existing columns into a new column on the end of df
df["columns"] = df.columns
cols = df.columns.tolist()
#shift the "columns" column to the front of the dataframe
cols = cols[-1:] + cols[:-1]
df = df[cols]
OutputDataSet = df
',
@input_data_1 = N'select GHI ,
MNO,
JKL
from PIVOTED_TIME_ID_MATRIX'
with result sets ((column_names varchar(max), --add a new column in the result set
GHI float,
MNO float,
JKL float))
Можете попробовать
df.set_index(df.columns)
нижеdf = InputDataSet.corr()
?