[在工作中,我们有一个Microsoft SQL Server Analysis Services连接(多维数据集),我们可以通过该连接进行查询以获取Excel文件中的值。我试图通过直接使用Python连接到多维数据集来对工程进行逆向工程。我的脚本(从Execute query on SQL Server Analysis Services with IronPython启发而来)是这样的:
import pandas as pd
import pyodbc as sq
import clr
clr.AddReference(r"C:\Program Files (x86)\Microsoft Office\root\vfs\ProgramFilesX86\Microsoft.NET\ADOMD.NET\130\Microsoft.AnalysisServices.AdomdClient.dll")
clr.AddReference("System.Data")
from Microsoft.AnalysisServices.AdomdClient import AdomdConnection , AdomdDataAdapter
from System.Data import DataSet
con = AdomdConnection("Connection String")
con.Open()
query = con.CreateCommand()
query.CommandText = "My Query"
adp = AdomdDataAdapter(query)
Greeks = DataSet()
adp.Fill(Greeks)
con.Close()
在我能够连接,执行查询并检索我的数据集的情况下,它能很好地工作。
问题是,现在我试图对数据进行一些操作,而这些操作无法直接在DataSet中完成,因此我将其值解析为DataFrame以在其中进行操作。我正在尝试找出一种方法,可以将所得的System.Data.DataTable对象中的值解析为pandas DataFrame
我当前用于将值解析到DataFrame中的脚本是这样的: Rows = Greeks.Tables[0].Rows.Count
Columns = Greeks.Tables[0].Columns.Count
Greeks_DF = pd.DataFrame(index= list(range(0,Rows)),columns=list(range(0,Columns)))
for row in list(range(0,Rows)):
for column in list(range(0,Columns)):
Greeks_DF.iloc[row,column] = Greeks.Tables[0].Rows[row][column]
它可以工作,但是比我想要的慢,尽管对于具有13880行乘39列的数据集来说相当快。为了提高效率,寻找一种在单行(或多行)线路/语句中执行此操作而不循环的方法。我一直在寻找,但是到处都可以找到与我已经拥有的解决方案非常相似的解决方案。编辑:
[当我尝试做时:
Greeks_DF = pd.DataFrame(Greeks.Tables[0])
它给我一个错误,提示“ TypeError:非序列迭代”是否有将Datatable转换为可在DataFrame中传递的可迭代对象的方法?
谢谢!