python - Bokeh 日期时间 x_range : 'ValueError, Unrecognized range input'

标签 python pandas datetime bokeh

我有一个数据框 df2 看起来像:

DATE       | STATUS
2018-02-01     A
2018-02-02     A
2018-02-02     B
..
2018-02-05     B

所有的值都是字符串类型。我似乎无法将日期识别为日期并绘制到堆叠条形图的 x 轴上。这是我最近的徒劳尝试:

import pandas as pd
from bokeh.io import curdoc
import numpy as np
from bokeh.models import ColumnDataSource, HoverTool,DatetimeTickFormatter
from bokeh.core.properties import value
from bokeh.plotting import figure

#prepare x axis
df2['DATE']=pd.to_datetime(df2['DATE'])
Months=df2["DATE"].tolist()
Months=list(set(Months))  #remove duplicates

IBs=df2["STATUS"].tolist()
IBs=list(set(IBs))

#pivot dataframe
#df2["DATE"]=df2["DATE"].str.strip() #trim values in column
df2=df2.pivot_table(index=['DATE'],columns=['STATUS'], aggfunc=len)
df2=df2.reset_index()
df2=df2.fillna(0) #replace nans with 0

#add plot
source=ColumnDataSource(data=df2)
p= figure(x_range= df2["DATE"], plot_width=700, plot_height=400, x_axis_type='datetime',
x_axis_label='Month', y_axis_label='count')
p.xaxis[0].formatter = DatetimeTickFormatter(days="%Y/%m/%d")

p.vbar_stack(IBs, x='DATE', width=0.9, source=source, legend=[value(x) for x in IBs])

curdoc().add_root(p)

提前致谢。

编辑:错误是 Urecognized range input: [Timestamp('2018-02-02 00:00:00').., Timestamp('2018-02-03 00:00:00')]

最佳答案

我遇到了同样的问题,只是弄清楚问题出在哪里(至少就我而言)。

基本上,无论您传递给 x_range 的对象是什么,它都必须是可迭代的,并且只包含字符串类型的元素。

因此,在传入 x_range 之前,将 df2["DATE"] 的元素类型转换为 str。

p = figure(x_range=df2["DATE"], ...)  # df2["DATE"] = list(map(str, df['score']))

关于python - Bokeh 日期时间 x_range : 'ValueError, Unrecognized range input' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48691020/

相关文章:

python - 分割日期时间、python、pandas

php - MySQL/PHP - 时间流逝

python - 如何在推送新对象之前检查对象是否存在于队列中

python - 对称色图 matplotlib

python - 获取购买次数最多的前 10 件商品作为列表

python - Pandas 非连续数字过滤器丢弃 0 行

python - 写入文本文件不是实时发生的。如何解决这个问题

python - 重命名 Pandas 中的选定列

python - 更多 Pythonic/Pandaic 方法循环遍历 pandas 系列

php - RFC 3339 如何从