2016-04-11 8 views
1

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?

+0

Woher kommt der Datenrahmen 'df'? Das Problem scheint mit diesem Objekt zu sein, aber seine Generierung fehlt in dem von Ihnen bereitgestellten Code. – xthestreams

+0

@xthestreams Ich habe die Daten im CSV-Format bereitgestellt. – blz

Antwort

1

Von was ich sagen kann, ist dies ein Fehler, der auftritt, wenn die name und labels_name Parameter von values die gleichen sind.

In Ihrem Fall sind sie beide retailers, also würden Sie das Etikett auf etwas anderes, z. rtlrs. Sie möchten auch die Referenz in Stack und Tooltips entsprechend ändern.

Verwandte Themen