wake-up-neo.com

Pandas gruppieren sich an to_csv

Möchten Sie eine Pandas-Gruppe über einen Datenrahmen an CSV ausgeben. Ich habe verschiedene StackOverflow-Lösungen ausprobiert, aber sie haben nicht funktioniert. 

Python 3.6.1, Pandas 0.20.1

gruppenergebnis sieht folgendermaßen aus: 

id  month   year    count
week                
0   9066    82  32142   895
1   7679    84  30112   749
2   8368    126 42187   872
3   11038   102 34165   976
4   8815    117 34122   767
5   10979   163 50225   1252
6   8726    142 38159   996
7   5568    63  26143   582

Willst du eine csv, die aussieht

week  count
0   895
1   749
2   872
3   976
4   767
5   1252
6   996
7   582

Aktueller Code:

week_grouped = df.groupby('week')
week_grouped.sum() #At this point you have the groupby result
week_grouped.to_csv('week_grouped.csv') #Can't do this - .to_csv is not a df function. 

Lesen Sie SO -Lösungen:

gruppieren nach csv-Datei Pandas

week_grouped.drop_duplicates().to_csv('week_grouped.csv')

Ergebnis: AttributeError: Kann nicht auf das aufrufbare Attribut 'drop_duplicates' von 'DataFrameGroupBy'-Objekten zugreifen. Versuchen Sie es mit der' apply'-Methode

Python-Pandas - Gruppieren durch Ausgabe in eine Datei

week_grouped.reset_index().to_csv('week_grouped.csv')

Ergebnis: AttributeError: "Kann nicht auf das aufrufbare Attribut 'reset_index' von 'DataFrameGroupBy' -Objekten zugreifen. Versuchen Sie es mit der 'apply'-Methode."

5
kalmdown

Versuchen Sie folgendes:

week_grouped = df.groupby('week')
week_grouped.sum().reset_index().to_csv('week_grouped.csv')

Dadurch wird der gesamte Datenrahmen in die Datei geschrieben. Wenn Sie nur diese beiden Spalten wollen, 

week_grouped = df.groupby('week')
week_grouped.sum().reset_index()[['week', 'count']].to_csv('week_grouped.csv')

Hier ist eine Zeile für Zeile, die den ursprünglichen Code erklärt:

# This creates a "groupby" object (not a dataframe object) 
# and you store it in the week_grouped variable.
week_grouped = df.groupby('week')

# This instructs pandas to sum up all the numeric type columns in each 
# group. This returns a dataframe where each row is the sum of the 
# group's numeric columns. You're not storing this dataframe in your 
# example.
week_grouped.sum() 

# Here you're calling the to_csv method on a groupby object... but
# that object type doesn't have that method. Dataframes have that method. 
# So we should store the previous line's result (a dataframe) into a variable 
# and then call its to_csv method.
week_grouped.to_csv('week_grouped.csv')

# Like this:
summed_weeks = week_grouped.sum()
summed_weeks.to_csv('...')

# Or with less typing simply
week_grouped.sum().to_csv('...')
6
Alex Luis Arias

Ändern Sie Ihre zweite Zeile in week_grouped = week_grouped.sum() und führen Sie alle drei Zeilen erneut aus.

Wenn Sie week_grouped.sum() in einer eigenen Jupyter-Notizbuchzelle ausführen, sehen Sie, wie die Anweisung zurückgibt die Ausgabe an die Ausgabe der Zelle, anstatt das Ergebnis week_grouped zuzuweisen. Einige Pandas-Methoden haben ein inplace=True-Argument (z. B. df.sort_values(by=col_name, inplace=True)), sum jedoch nicht.

EDIT: erscheint jede Wochennummer nur einmal in Ihrem CSV? Wenn ja, ist hier eine einfachere Lösung, die groupby nicht verwendet:

df = pd.read_csv('input.csv')
df[['id', 'count']].to_csv('output.csv')
2

Ich habe das Gefühl, dass es nicht nötig ist, eine Gruppe zu verwenden. Sie können einfach die Spalten löschen, die Sie nicht möchten. 

df = df.drop(['month','year'],axis==1)
df.reset_index()
df.to_csv('Your path')
0
Lucas Dresl

Group By gibt Schlüssel zurück, Wertepaare, bei denen der Schlüssel der Bezeichner der Gruppe ist und der Wert die Gruppe selbst ist, d. H.

In Ihrem Beispiel ist week_grouped = df.groupby('week') eine Gruppe von Gruppen (pandas.core.groupby.DataFrameGroupBy-Objekt), die Sie wie folgt detailliert untersuchen können:

for k, gr in week_grouped:
    # do your stuff instead of print
    print(k)
    print(type(gr)) # This will output <class 'pandas.core.frame.DataFrame'>
    print(gr)
    # You can save each 'gr' in a csv as follows
    gr.to_csv('{}.csv'.format(k))

Alternativ können Sie die Aggregationsfunktion für Ihr gruppiertes Objekt berechnen

result = week_grouped.sum()
# This will be already one row per key and its aggregation result
result.to_csv('result.csv') 

In Ihrem Beispiel müssen Sie das Funktionsergebnis einer Variablen zuweisen, da Pandasobjekte standardmäßig unveränderlich sind.

some_variable = week_grouped.sum() 
some_variable.to_csv('week_grouped.csv') # This will work

im Wesentlichen sollen result.csv und week_grouped.csv gleich sein

0
Revaz