ValueError: zu viele Werte zum Auspacken bei Verwendung von itertuples () auf pandas dataframe

Ich versuche, ein einfaches Pandas-Dataframe in eine verschachtelte JSON-Datei zu konvertieren, basierend auf der Antwort, die ich hier gefunden habe: pandas groupby zu verschachtelten json

Mein gruppiertes Dataframe sieht so aus:

firstname lastname orgname phone mobile email teamname members 1 0 John Doe Anon 916-555-1234 none john.doe@wildlife.net 1 Jane Doe Anon 916-555-4321 916-555-7890 jane.doe@wildlife.net 2 0 Mickey Moose Moosers 916-555-0000 916-555-1111 mickey.moose@wildlife.net 1 Minny Moose Moosers 916-555-2222 none minny.moose@wildlife.net 

Mein Code ist:

 data = pandas.read_excel(inputExcel, sheetname = 'Sheet1', encoding = 'utf8') grouped = data.groupby(['teamname', 'members']).first() results = defaultdict(lambda: defaultdict(dict)) for index, value in grouped.itertuples(): for i, key in enumerate(index): if i ==0: nested = results[key] elif i == len(index) -1: nested[key] = value else: nested = nested[key] print json.dumps(results, indent = 4) 

Ich bekomme den folgenden Fehler auf der ersten "for" Schleife. Was verursacht diesen Fehler in diesem Umstand und was würde es dauern, um es zu beheben, um die verschachtelten json zu geben?

  for index, value in grouped.itertuples(): ValueError: too many values to unpack 

  • Wie man einen String analysiert und ein verschachteltes Array zurückgibt?
  • Sortierung eines verschachtelten Wörterbuchs mit Listen in Python
  • Python - Zugriff auf Werte, die in Wörterbüchern verschachtelt sind
  • Eine Liste in verschachtelte Listen in Python hinzufügen
  • Decodierung verschachtelte JSON mit mehreren "für" Schleifen
  • Rekursive Looping-Funktion in Python
  • Python nesting Wörterbuch: OrderedDict aus Sammlungen
  • Finden Sie einen Wert innerhalb der verschachtelten json Wörterbuch in python
  • 2 Solutions collect form web for “ValueError: zu viele Werte zum Auspacken bei Verwendung von itertuples () auf pandas dataframe”

    Bei der Verwendung von itertuples() ist der Index als Teil des Tupels enthalten, also ist der for index, value in grouped.itertuples(): nicht wirklich sinnvoll. In der Tat, itertuples() verwendet namedtuple mit Index als einer der Namen.

    Betrachten Sie das folgende Setup:

     data = {'A': list('aabbc'), 'B': [0, 1, 0, 1, 0], 'C': list('vwxyz'), 'D': range(5,10)} df = pd.DataFrame(data).set_index(['A', 'B']) 

    Erzielung des folgenden DataFrame:

      CD AB a 0 v 5 1 w 6 b 0 x 7 1 y 8 c 0 z 9 

    Dann df.itertuples() jedes Tupel in df.itertuples() ergibt:

     Pandas(Index=('a', 0), C='v', D=5) Pandas(Index=('a', 1), C='w', D=6) Pandas(Index=('b', 0), C='x', D=7) Pandas(Index=('b', 1), C='y', D=8) Pandas(Index=('c', 0), C='z', D=9) 

    Also, was du wohl machen willst, ist so etwas wie der unten stehende Code, wobei der value durch t[1:] ersetzt wird t[1:] :

     for t in grouped.itertuples(): for i, key in enumerate(t.Index): ... 

    Wenn du auf Komponenten des namedtuple zugreifen namedtuple , kannst du auf die Dinge zugreifen oder namentlich zugreifen. Also, im Fall von Ihrem DataFrame, t[1] und t.firstname sollte gleichwertig sein. Denken Sie daran, dass t[0] der Index ist, also beginnt Ihre erste Spalte bei 1 .

    Wie ich itertuples verstehe, wird es ein Tupel mit dem ersten Wert zurückgeben, der der Index ist und die restlichen Werte alle Spalten sind. Sie haben nur für index, value in grouped.itertuples() was bedeutet, dass es versucht, alle Spalten in eine einzige Variable index, value in grouped.itertuples() , die nicht funktioniert. Die groupby kommt wahrscheinlich auch ins Spiel, aber es sollte immer noch alle Werte innerhalb des Ergebnisses enthalten, was bedeutet, dass du immer noch zu viele Spalten ausgepackt hast.

    Python ist die beste Programmiersprache der Welt.