PYODBC aux Pandas - DataFrame pas de travail - Forme de valeurs (x,y), les indices implique (w,z)

J'ai utilisé pyodbc avec python avant, mais maintenant, j'ai installé sur une nouvelle machine ( win 8 64 bits, Python 2.7 64 bits, PythonXY avec Spyder).

Avant que j'ai utilisé pour (en bas, vous pouvez trouver plus d'exemples réels):

columns = [column[0] for column in cursor.description]
temp = cursor.fetchall()
data = pandas.DataFrame(temp,columns=columns)

et cela fonctionne très bien. Il semble maintenant que DataFrame n'est pas en mesure de convertir les données récupérées à partir du curseur plus. Il retourne:

Forme de valeurs (x,y), les indices implique (w,z)

J'ai un peu de voir où est la question. En gros, imaginez que je chercher une seule ligne. Puis DataFrame tiens à le façonner (1,1), un élément seulement. Alors que j'aimerais avoir (1,X) où X est la longueur de la liste.

Je ne suis pas sûr de savoir pourquoi le comportement est modifié. Peut-être que c'est les Pandas version que j'ai, ou le pyodbc, mais la mise à jour, est problématique. J'ai essayé de mettre à jour certains modules, mais c'vis de tout, toute méthode que j'utilise (binaires-pour le droit de la machine/de l'installation--pip installer, facile à installer,n'importe quoi! etc.. ce qui est très frustrant en effet. Je serais probablement éviter de Win 8 64 bits à partir de maintenant pour Python).

Exemples réels:

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)

Retourne:
* ValueError: Forme de valeurs passées est (1, 1540), les indices implique (51, 1540)

Avis que:

ipdb> type(data)
<type 'list'>
ipdb> np.shape(data)
(1540, 51)
ipdb> type(data[0])
<type 'pyodbc.Row'>

Maintenant, par exemple, si nous le faisons:

ipdb> DataFrame([1,2,3],columns=['a','b','c'])

* ValueError: Forme de valeurs passées est (1, 3), les indices implique (3, 3)

et si nous le faisons:

ipdb> DataFrame([[1,2,3]],columns=['a','b','c'])

a b c
0 1 2 3

Cependant, même en essayant:

ipdb> DataFrame([data[0]], columns=columns)
*** ValueError: Shape of passed values is (1, 1), indices imply (51, 1)

ou

ipdb> DataFrame(data[0], columns=columns)
*** PandasError: DataFrame constructor not properly called!

S'il vous plaît aider 🙂 Merci!

et la question est...?
qu'est-ce que temp utilisées, où data vient d'où ?
L'ajout de l'échantillon de données permettront d'améliorer la probabilité d'une réponse.
Bien sûr, la question est de savoir comment puis-je me débarrasser de l'erreur et obtenir des DataFrame(données,les colonnes=colonnes) de travail. Je l'ai dit ci-dessus: je voudrais avoir (1,X) où X est la longueur de la liste.
pourquoi avez-vous besoin de spécifier les noms de colonne? les pandas de les détecter automatiquement. pandas.read_sql(query_string, cnxn_obj)

OriginalL'auteur user1350191 | 2013-11-18