2
votes

Erreur Pandas Pivot "Exception: les données doivent être unidimensionnelles"

J'utilise Pycharm (version 2018.2.4) avec Python 3.6.7 en cours d'exécution.

J'essaie actuellement d'utiliser la fonction pivot pandas, mais même l'exemple de code:

import pandas as pd
df = pd.DataFrame({'foo':['one', 'one', 'one', 'two', 'two','two'],'bar': 
  ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6],'zoo': ['x', 
   'y', 'z', 'q', 'w', 't']})
df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])


2 commentaires

Je ne parviens pas à reproduire cela avec la v0.23.4.


Cela pourrait-il avoir à voir avec numpy? Je suppose que cela utilise un tableau numpy d'une sorte en arrière-plan et j'ai également eu une autre erreur aujourd'hui en essayant d'appliquer la fonction de carte à un autre index de temps de pandas (df que j'utilise est nommé prix): Le code price.index.strftime (' % j '). map (lambda x: math.ceil (int (x) / 7.0)) cause AttributeError: l'objet' numpy.ndarray 'n'a pas d'attribut' map 'Utilisé pour fonctionner correctement aussi jusqu'à la semaine dernière


3 Réponses :


0
votes

Si vous en faites un dictionnaire, cela pourrait fonctionner correctement. Essayez ceci!

df = pd.DataFrame({'foo':['one', 'one', 'one', 'two', 'two','two'],'bar': 
  ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6],'zoo': ['x', 
   'y', 'z', 'q', 'w', 't']})
df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])

#output:

    baz zoo
bar A   B   C   A   B   C
foo                     
one 1   2   3   x   y   z
two 4   5   6   q   w   t


2 commentaires

Malheureusement, cela ne résout pas le problème pour moi, cela me donne la même erreur qu'avant.


C'est très étrange, cela fonctionnait très bien pour moi aussi, je ne peux pas vraiment penser à tout ce qui a changé et pourrait en être la cause.



2
votes

J'ai pu recréer la même erreur lors du test dans le notebook jupyter avec pandas: 0.22.0 et numpy: 1.14.0.

Je n'ai pas été en mesure de comprendre pourquoi ce problème se produit mais j'ai réécrit le code dans l'exemple comme

import pandas as pd
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
                          'two'],
                  'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'baz': [1, 2, 3, 4, 5, 6],
                   'zoo': ['x', 'y', 'z', 'q', 'w', 't']})

df.set_index(['foo','bar'],inplace=True)
df.unstack(level=1)

et obtenu la sortie attendue (comme indiqué dans le pandas doc )

J'espère que cela vous aidera!


0 commentaires

1
votes

Ce qui suit fonctionne pour moi. Essaie!

import pandas as pd
df = pd.DataFrame({'foo':['one', 'one', 'one', 'two', 'two','two'],'bar': 
  ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6],'zoo': ['x', 
   'y', 'z', 'q', 'w', 't']})
df.pivot(index='foo', columns='bar')[['baz', 'zoo']]


0 commentaires