之前我使用pyodbc和python但现在我已经将它安装在一台新机器上(win 8 64 bit,Python 2.7 64 bit,PythonXY with Spyder).
在我习惯之前(在底部你可以找到更多真实的例子):
columns = [column[0] for column in cursor.description]
temp = cursor.fetchall()
data = pandas.DataFrame(temp,columns=columns)
Run Code Online (Sandbox Code Playgroud)
它会工作正常.现在,似乎DataFrame无法再从光标提取的数据进行转换.它返回:
传递值的形状是(x,y),指数暗示(w,z)
我有点看问题在哪里.基本上,想象一下我只获取一行.然后DataFrame想要塑造它(1,1),只有一个元素.虽然我想(1,X),其中X是列表的长度.
我不确定为什么行为改变了.也许它是我拥有的Pandas版本,或pyodbc,但更新是有问题的.我试图更新一些模块,但它搞砸了一切,我使用的任何方法(二进制文件 - 用于正确的机器/安装 - 点子安装,易于安装,任何东西等等......这确实非常令人沮丧.我可能会避免从现在开始为Python赢取8位64位.
真实的例子:
sql = 'Select * form TABLE'
cursor.execute(sql)
columns = [column[0] for column in cursor.description]
data = cursor.fetchall()
con.close()
results = DataFrame(data, columns=columns)
Run Code Online (Sandbox Code Playgroud)
返回: * ValueError:传递值的形状为(1,1540),索引暗示(51,1540)
请注意:
ipdb> type(data)
<type 'list'>
ipdb> np.shape(data)
(1540, 51)
ipdb> type(data[0])
<type 'pyodbc.Row'>
Run Code Online (Sandbox Code Playgroud)
现在,例如,如果我们这样做:
ipdb> DataFrame([1,2,3],columns=['a','b','c'])
Run Code Online (Sandbox Code Playgroud)
* ValueError:传递值的形状为(1,3),索引意味着(3,3)
如果我们这样做:
ipdb> DataFrame([[1,2,3]],columns=['a','b','c'])
Run Code Online (Sandbox Code Playgroud)
abc 0 …