Как установить номера строк в возврате запроса равными именам столбцов?

Я рассчитываю корреляцию между столбцами в большой таблице, используя механизм 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 

Это возможно?

Можете попробовать df.set_index(df.columns) ниже df = InputDataSet.corr()?

ResidentSleeper 08.04.2019 20:49

Да, он прекрасно выводится в окно консоли с помощью print(), но он не передает индекс фрейма данных в фактический набор результатов, где я могу сохранить вывод в CSV. Спасибо за предложение, однако, мне, возможно, придется найти способ использовать это в качестве обходного пути, если в SQL нет способа заставить индекс отражать столбцы. Просто пытаюсь максимально автоматизировать это для моей команды.

b00m1 08.04.2019 21:45

Попробуйте df.set_index(df.columns, inplace=True) это должно сработать.

ResidentSleeper 09.04.2019 03:29

Спасибо @ResidentSleeper! В итоге я объединил это решение с обходным путем, чтобы получить результат, который мне нужен. Поскольку индекс DataFrame, по-видимому, не передается обратно в набор результатов в SSMS, я добавил результаты вызова df.columns в новый столбец, затем переместил его в начало DataFrame и добавил новый столбец в набор результатов.

b00m1 10.04.2019 16:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я объединил приведенный выше совет по использованию 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))

Другие вопросы по теме