2014-02-25 15 views
5

Wie erstellt man ein Wörterbuch von Pandas-Datenrahmen und gibt die Datenrahmen in Excel-Arbeitsblätter zurück?Wie erstellt man ein Wörterbuch von Pandas-Datenrahmen und gibt die Datenrahmen in Excel-Arbeitsblätter zurück?

Hallo zusammen,

Ich lerne, Pandas und Python, und ich möchte ein Wörterbuch erstellen, die ein paar Datenrahmen enthält, die ich dann Metriken über jeden Datenrahmen ausgeführt werden können. Mit jedem eindeutigen Clusternamen (eine der Spalten) möchte ich einen Datenrahmen (Teilmenge des ursprünglichen Datenrahmens) erstellen.

Dann würde ich gerne in der Lage sein, es auszuwählen, Metriken darüber laufen zu lassen, die Ergebnisse in eine neue Datenrahmen, und legen Sie dann den ursprünglichen Datenrahmen (jede Teilmenge) in ein separates Arbeitsblatt xlsxwriter python-Bibliothek.

#create dictionary object 

    c_dict = {} 

#get a list of the unique names 

c_dict= data.groupby('Cluster').groups 

#create a dictionary of dataframes, one for each cluster 

for cluster in c_dict.items(): 
    df = data[data['Cluster']==cluster 
    c_dict[cluster] =df              <<< im getting invalid syntax here 

#go through the dictionary and create a worksheet and put the dataframe in it. 

for k,v in c_dict.items(): 
    dataframe = GetDF(k)               <<< creating worksheets and puts the data from the dataframe > worksheet is not working because of invalid syntax when trying to create dataframe dictionary ^^ 
    dataframe.to_excel(writer,sheet_name=k) 
writer.save 

#get the dataframe from the dictionary, 

GetDF(dictionary_key) 
      return c_dict[dictionary_key] 
+0

Es gibt viele Probleme mit Ihrem Code. Sie weisen c_dist = {} zu und weisen dann c_dict sofort einem groupby-Objekt zu. Sie rufen auch nicht die Speichermethode für Writer auf, Sie verweisen nur auf die Funktion. Sie überprüfen auch auf die Gleichheit von c_dict [Cluster] zu df, es ist nicht klar, warum das passiert. – munk

+0

Ich habe einen großen Datensatz. Ich möchte kleinere Datensätze (Datenrahmen) basierend auf den eindeutigen Werten der Clusterspalte erstellen. In diesem Code wollte ich die kleineren Datensätze (Datenrahmen) erstellen und sie einem Wörterbuch zuordnen, damit ich sie später aufrufen konnte. Wie rufst du das Writer-Objekt auf, statt es zu referenzieren?> – yoshiserry

+0

Um eine Funktion aufzurufen, brauchst du Klammern mit der entsprechenden Argumentliste. Sie rufen das Objekt nicht auf, Sie rufen eine Methode für das Objekt auf. Ich nehme an, du meintest writer.save(). Sie sind wahrscheinlich besser dran, wenn Sie nur das Objekt groupby verwenden, in dem Sie auf eine Gruppe verweisen können, anstatt es in ein Diktat zu stecken. – munk

Antwort

3

ich denke, das ist das, was Sie suchen. Als ich in den Kommentaren gesagt, es ist wahrscheinlich nicht die richtige Lösung und es ist definitiv nicht idomatic für pandas DataFrames.

import pandas as pd 

groups = data.groupby('Cluster') 

#create a dictionary of dataframes, one for each cluster 
c_dict = {k: pd.DataFrame(v) for k, v in groups.groups.iteritems() } 

Wenn Sie diese in eine Excel-Datei gespeichert werden soll, ist die Dokumentation hier: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html

Es gibt ein schönes Beispiel an der Unterseite ist, die das tun, was Sie brauchen. Tipp: Verwenden Sie for k,v in myDict.iteritems(), um Schlüssel und Werte zu erhalten.

+0

Danke ich war unter dem Eindruck ich sollte dict.items verwenden? Was sind iter-Artikel als eine-posierte? Und Pandas idiomatisch? – yoshiserry

+0

Es hängt tatsächlich davon ab, ob Sie Python 2 oder 3 verwenden. Es gibt eine Erklärung [hier] (http://stackoverflow.com/questions/10458437/python-what-is-the-difference-between-dict-items -and-dict-iteritems). iteritems() erstellt keine Kopie, was bei großen Datensätzen wichtig sein kann. Zur Programmierung von Idiomen siehe [Wikipedia Artikel] (http://en.wikipedia.org/wiki/Programming_idiom) und das [Pandas Cookbook] (http://pandas.pydata.org/pandas-docs/stable/cookbook.html)) – munk

+0

@yoshiserry hast du das gelöst? Könntest du deine Lösung posten, muss ich etwas ähnliches tun. – toasteez

Verwandte Themen