"Konnte nicht interpretiert Eingabe-Fehler mit dem Seaborn beim Plotten groupbys
Sagen, dass ich diese dataframe
d = { 'Path' : ['abc', 'abc', 'ghi','ghi', 'jkl','jkl'],
'Detail' : ['foo', 'bar', 'bar','foo','foo','foo'],
'Program': ['prog1','prog1','prog1','prog2','prog3','prog3'],
'Value' : [30, 20, 10, 40, 40, 50],
'Field' : [50, 70, 10, 20, 30, 30] }
df = DataFrame(d)
df.set_index(['Path', 'Detail'], inplace=True)
df
Field Program Value
Path Detail
abc foo 50 prog1 30
bar 70 prog1 20
ghi bar 10 prog1 10
foo 20 prog2 40
jkl foo 30 prog3 40
foo 30 prog3 50
Ich kann insgesamt kein problem, (wenn es einen besseren Weg, dies zu tun, durch die Art und Weise, möchte ich wissen!)
df_count = df.groupby('Program').count().sort(['Value'], ascending=False)[['Value']]
df_count
Program Value
prog1 3
prog3 2
prog2 1
df_mean = df.groupby('Program').mean().sort(['Value'], ascending=False)[['Value']]
df_mean
Program Value
prog3 45
prog2 40
prog1 20
Kann ich zeichnen Sie es von Pandas kein problem...
df_mean.plot(kind='bar')
Aber warum erhalte ich diese Fehlermeldung, wenn ich versuche es in seaborn?
sns.factorplot('Program',data=df_mean)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-26-23c2921627ec> in <module>()
----> 1 sns.factorplot('Program',data=df_mean)
C:\Anaconda3\lib\site-packages\seaborn\categorical.py in factorplot(x, y, hue, data, row, col, col_wrap, estimator, ci, n_boot, units, order, hue_order, row_order, col_order, kind, size, aspect, orient, color, palette, legend, legend_out, sharex, sharey, margin_titles, facet_kws, **kwargs)
2673 # facets to ensure representation of all data in the final plot
2674 p = _CategoricalPlotter()
-> 2675 p.establish_variables(x_, y_, hue, data, orient, order, hue_order)
2676 order = p.group_names
2677 hue_order = p.hue_names
C:\Anaconda3\lib\site-packages\seaborn\categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units)
143 if isinstance(input, string_types):
144 err = "Could not interperet input '{}'".format(input)
--> 145 raise ValueError(err)
146
147 # Figure out the plotting orientation
ValueError: Could not interperet input 'Program'
InformationsquelleAutor marshallbanana | 2015-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund für die Ausnahme, die Sie bekommen ist, dass
Program
wird ein index des dataframesdf_mean
unddf_count
nach Ihremgroup_by
Betrieb.Wollte man die
factorplot
ausdf_mean
, eine einfache Lösung ist das hinzufügen der index einer Spalte,Allerdings könnte man auch einfach lassen
factorplot
tun die Berechnungen für Sie,Sie erhalten das gleiche Ergebnis.
Hoffe, es hilft.
BEARBEITEN nach Kommentaren
In der Tat, Sie machen einen sehr guten Punkt, um die parameter
as_index
; standardmäßig ist es auf Wahr gesetzt, und in diesem FallProgram
wird ein Teil des index, wie in deiner Frage.Nur klar zu sein, auf diese Weise
Program
ist keine Spalte mehr, sondern es wird die index. der trickdf_mean['Program'] = df_mean.index
tatsächlich hält der index, wie es ist, und fügt eine neue Spalte für den index, so dassProgram
dupliziert jetzt.Jedoch, wenn Sie
as_index
auf False gesetzt ist, erhaltenProgram
als eine Spalte, plus ein neues autoincrement-index,Diese Weise, die Sie füttern könnten, um es direkt zu
seaborn
. Immer noch, Sie könnte verwendendf
und das gleiche Ergebnis erhalten.Hoffe, es hilft.
as index
parameter ist standardmäßig True, so dass die Gruppe label (ieProgram
) ist bereits der index.df_mean.index
Index(['prog3', 'prog2', 'prog1'], dtype='object', name='Program')
Ich habe versucht die zweite Methode, und ich die gleiche Fehlermeldung erhalten, wie gut.Ich bin mir nicht sicher, ob wir einander verstehen. Sowieso Sie machen einen guten Punkt über die
as_index
Parameters und ich aktualisiere die Antwort. Hoffe es ist klarer jetzt.Sorry - ich habe gerade festgestellt, dass wir sagen, die gleiche Sache über den index. Ich dachte mir, dass factorplot wäre in der Lage, verwenden Sie den index für die x-Achse standardmäßig. Also ich bin verwundert, dass deine zweite Lösung gibt den gleichen Fehler
Sorry, ich hab einen Tippfehler. Die zweite Lösung ist
sns.factorplot(x='Program', y='Value', data=df)
, was bedeutet, dass Sie verwenden könntendf
direkt. Hoffe, es macht jetzt mehr Sinn.Ich danke Ihnen so sehr. Ich sehe meine Fehler ist, dass der x-Wert muss eine Spalte nicht in einem index.
InformationsquelleAutor lrnzcig