Обновление диапазонов Bokeh с объектами Pandas Period - PullRequest
0 голосов
/ 19 октября 2018

Допустим, у меня есть фрейм данных line_src_yr, например:

Date Value
2017 100
2018 200

и второй фрейм данных dfQtr, например:

Date   Value
2017Q1  25
2017Q2  25
2017Q3  25
2017Q4  25
2018Q1  100
2018Q2  100

Я бы хотел чередоватькадры данных, лежащие в основе моего графика, с помощью переключателя:

QtrLineSrc=ColumnDataSource(data=dfQtr)
line_src_yr=ColumnDataSource(data=line_df_yr)

if radio_group.active==0:
    p_line.xaxis_type='datetime'             
    p_line.xaxis.formatter=DatetimeTickFormatter(days=["%Y"])
    line_src_yr.data={"Date":line_df_yr["Date"],"Value":line_df_yr['Value']}
elif radio_group.active==1:
    line_src_yr.data=QtrLineSrc.data
    p_line.x_range=list(set(dfQtr["Date"]))

radio_group=RadioGroup(labels=["Annual","Quarter"], active =0)
radio_group.on_change('active', update)

p_line=figure(plot_width= 750, plot_height=450)
p_line.line(x="Date",y="Value", source=line_src_yr)

Но я получаю

: Ошибка при запуске обработчика приложения: Неизвестный ввод диапазона: '[Period (' 2017Q3 ','Q-DEC '), период («2018Q1», «Q-DEC»), период («2018Q2», «Q-DEC»), период («2017Q4», «Q-DEC»), период («2017Q1»), «Q-DEC»), период («2018Q3», «Q-DEC»), период («2018Q4», «Q-DEC»), период («2017Q2», «Q-DEC»)] '

Я подозреваю, что это из-за того, что dfQtr не является datetime, но если я попытаюсь преобразовать его в такое, то получится <class 'pandas._libs.tslibs.period.Period'> is not convertible to datetime

1 Ответ

0 голосов
/ 19 октября 2018

Поддержка панд Period была добавлена ​​совсем недавно, в Запрос на извлечение # 8027 .На сегодняшний день это новее, чем любой полный выпуск Bokeh.Работа будет частью следующего выпуска, в конце октября 2018 года. Если вы хотите попробовать что-то сразу, вы можете установить Developer Build .(Обратите внимание, что ресурсы CDN для dev-сборки не гарантированно доступны бесконечно , никогда не используйте артефакты сборки Bokeh dev «в производстве»)

Однако, если присмотреться, это такжеПохоже, вы пытаетесь установить диапазон из списка?

p_line.x_range = list(set(dfQtr["Date"])) # not valid

Это недопустимое использование.Это похоже на использование для категориальных диапазонов.Если ваш график имеет категориальный диапазон, вам нужно что-то более похожее на:

p_line.x_range.factors = [str(x) for x in set(dfQtr["Date"])]

Обратите внимание, что категориальные значения могут быть только строками.Если вы используете категориальный диапазон, вы можете сделать это уже без сборки dev, преобразовав объекты Period в любое строковое представление, которое вы хотите, чтобы они имели.Если вы не используете категориальный диапазон, тогда неясно, чего вы пытаетесь достичь.

...