Ich versuche, die stacked bar plot example an einige vorhandene Daten anzupassen.Warum beschwert sich Bokeh über eine fehlende Tolist-Eigenschaft?
Ich habe meinen Datenrahmen ähnlich wie im Beispiel strukturiert. Es kann here als CSV gefunden werden.
Hier ist mein Code:
from bokeh.charts import Bar, output_file, show
from bokeh.charts.attributes import cat, color
from bokeh.charts.operations import blend
bar = Bar(
df,
values=blend('farfetch','harrods', 'lyst', 'mrporter','nastygal','neimanmarcus','netaporter','theoutnet','yoox', name='retailers', labels_name='retailers'),
label=cat(columns='index', sort=False),
stack=cat(columns='retailers', sort=False),
tooltips=[('retailers', '@retailers'), ('brands', '@index')]
)
show(bar)
Nach dem Ausführen dieses Codes, ich folgende Stack-Trace erhalten:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-65462e21dce7> in <module>()
4 label=cat(columns=df['index'].tolist(), sort=False),
5 stack=cat(columns='retailers', sort=False),
----> 6 tooltips=[('retailers', '@retailers'), ('brands', '@index')]
7)
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/charts/builders/bar_builder.pyc in Bar(data, label, values, color, stack, group, agg, xscale, yscale, xgrid, ygrid, continuous_range, **kw)
318 kw['y_range'] = y_range
319
--> 320 chart = create_and_build(BarBuilder, data, **kw)
321
322 # hide x labels if there is a single value, implying stacking only
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/charts/builder.pyc in create_and_build(builder_class, *data, **kws)
60 # create the new builder
61 builder_kws = {k: v for k, v in kws.items() if k in builder_props}
---> 62 builder = builder_class(*data, **builder_kws)
63
64 # create a chart to return, since there isn't one already
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/charts/builder.pyc in __init__(self, *args, **kws)
280
281 # handle input attrs and ensure attrs have access to data
--> 282 attributes = self._setup_attrs(data, kws)
283
284 # remove inputs handled by dimensions and chart attributes
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/charts/builder.pyc in _setup_attrs(self, data, kws)
308
309 """
--> 310 source = ColumnDataSource(data.df)
311 attr_names = self.default_attributes.keys()
312 custom_palette = kws.get('palette')
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/models/sources.pyc in __init__(self, *args, **kw)
83 if not isinstance(raw_data, dict):
84 if pd and isinstance(raw_data, pd.DataFrame):
---> 85 raw_data = self._data_from_df(raw_data)
86 else:
87 raise ValueError("expected a dict or pandas.DataFrame, got %s" % raw_data)
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/bokeh/models/sources.pyc in _data_from_df(df)
105 new_data = {}
106 for colname in df:
--> 107 new_data[colname] = df[colname].tolist()
108 if index.name:
109 new_data[index.name] = index.tolist()
/Users/lthibault/Python/antidox/buisint/analysis/venv/lib/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name)
2667 if name in self._info_axis:
2668 return self[name]
-> 2669 return object.__getattribute__(self, name)
2670
2671 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'tolist'
Warum ist das passiert?
Woher kommt der Datenrahmen 'df'? Das Problem scheint mit diesem Objekt zu sein, aber seine Generierung fehlt in dem von Ihnen bereitgestellten Code. – xthestreams
@xthestreams Ich habe die Daten im CSV-Format bereitgestellt. – blz