Python 如何将查询返回中的行号设置为等于列名?

Python 如何将查询返回中的行号设置为等于列名?,python,sql,sql-server,pandas,sql-server-2019,Python,Sql,Sql Server,Pandas,Sql Server 2019,我正在使用SQL Server 2019中的数据库内Python引擎计算一个大表中列之间的相关性,由于此计算返回一个对角矩阵,我希望能够在SSMS中查看标记为镜像列名的行的结果 我知道SQL查询的基本知识,但仅此而已,所以我可能没有精确地描述搜索 下面是我的代码示例: execute sp_execute_external_script @language = N'Python', @script = N' import pandas as pd from pandas import Data

我正在使用SQL Server 2019中的数据库内Python引擎计算一个大表中列之间的相关性,由于此计算返回一个对角矩阵,我希望能够在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.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.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()
?是的,它用print()很好地输出到控制台窗口,但它不会将数据帧索引传递到实际的结果集,在那里我可以将输出保存到CSV中。不过,感谢您的建议,如果SQL中没有办法使索引镜像列,我可能必须找到一种方法将其用作解决方法。只是尽可能地为我的团队实现自动化。尝试
df.set\u index(df.columns,inplace=True)
这应该可以。谢谢@ResidentSleeper!我最终将这个解决方案与一个变通方法结合起来,以产生我想要的输出。由于数据帧的索引似乎没有传回SSMS的结果集中,我将调用df.columns的结果附加到一个新列,然后将其移到数据帧的前面,并在结果集中添加一个新列。您可以尝试
df.set\u index(df.columns)
下面的
df=InputDataSet.corr()
?是,它使用print()很好地输出到控制台窗口,但它不会将数据帧索引传递到实际结果集,在那里我可以将输出保存到CSV中。不过,感谢您的建议,如果SQL中没有办法使索引镜像列,我可能必须找到一种方法将其用作解决方法。只是尽可能地为我的团队实现自动化。尝试
df.set\u index(df.columns,inplace=True)
这应该可以。谢谢@ResidentSleeper!我最终将这个解决方案与一个变通方法结合起来,以产生我想要的输出。由于DataFrame的索引似乎没有传回SSMS的结果集中,因此我将调用df.columns的结果附加到一个新列,然后将其移到DataFrame的前面,并在结果集中添加一个新列。