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."
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('...')
Ä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')
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')
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