为什么散景抱怨缺少tolist属性?

时间:2016-04-11 01:55:16

标签: python bokeh

我正在努力使stacked bar plot example适应一些现有数据。

我的数据框架构造与示例中提供的类似。它可以作为CSV找到here

这是我的代码:

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)

执行此代码后,我得到以下堆栈跟踪:

---------------------------------------------------------------------------
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'

为什么会这样?

1 个答案:

答案 0 :(得分:1)

据我所知,这是name的{​​{1}}和labels_name参数相同时发生的错误。

在您的情况下,它们都是values,因此您可能希望将标签更改为其他内容,例如retailers。您还需要相应地更改堆栈和工具提示中的引用。