Python Bokeh堆芯验证错误:发现重复因素

Python Bokeh堆芯验证错误:发现重复因素,python,pandas,bokeh,Python,Pandas,Bokeh,我在运行Bokeh脚本时收到此错误: 错误:bokeh.core.validation.check:E-1019(重复因子):FactorRange必须为轴指定唯一的分类因子列表:找到重复因子:“265”、“299” 我以前从未收到过此错误消息。。我在多个不同的表上使用了我的脚本,所以我不确定会发生什么。我的SQL脚本中唯一的区别是我使用DATEADD(month,-1,GETDATE())而不是DATEADD(day,-30,GETDATE())来获取时间范围,但我无法想象这会影响Bokeh脚

我在运行Bokeh脚本时收到此错误:

错误:bokeh.core.validation.check:E-1019(重复因子):FactorRange必须为轴指定唯一的分类因子列表:找到重复因子:“265”、“299”

我以前从未收到过此错误消息。。我在多个不同的表上使用了我的脚本,所以我不确定会发生什么。我的SQL脚本中唯一的区别是我使用DATEADD(month,-1,GETDATE())而不是DATEADD(day,-30,GETDATE())来获取时间范围,但我无法想象这会影响Bokeh脚本并创建重复值

这是我的密码:

import os
import pandas as pd
import pyodbc
from bokeh.plotting import figure, show
from bokeh.io import export_png
from bokeh.models import ColumnDataSource, Title, FixedTicker

conn = pyodbc.connect('Driver={};'
                        'Server=server;'
                        'Database=db;'
                        'Trusted_Connection=no;'
                        'UID=username;'
                         'PWD=password;')

cursor = conn.cursor()
cursor.execute('SELECT * FROM [P21].[dbo].[UPS_shipment_daily_month]');
rows = cursor.fetchall()

str(rows)

df = pd.DataFrame( [[ij for ij in i] for i in rows] )
df.rename(columns={0: 'Count', 1: 'Date'}, inplace = True);
df.head()
df['Date'] = list(map(str, df['Date']))

ds = ColumnDataSource(df)
p = figure(x_range = df['Date'], plot_height = 800, plot_width = 1600, title = "30 Day Shipment Trend", toolbar_location=None, tools="")

p.line(source=ds, x='Date', y='Count', color="#87CEFA", line_width=8)

p.xaxis.axis_label = "Date"
p.xaxis.axis_label_standoff = 30
p.xaxis.axis_label_text_font_style = "normal"
p.yaxis.axis_label = "Number of Orders"
p.yaxis.axis_label_standoff = 30
p.yaxis.axis_label_text_font_style = "normal"
p.xaxis.axis_label_text_font_size = "15pt"
p.yaxis.axis_label_text_font_size = "15pt"
p.yaxis.major_label_text_font_size = "12pt"
p.xaxis.major_label_text_font_size = "8pt"

p.title.align = 'center'
p.title.text_font_size = '20pt'


p.xgrid.grid_line_color = None

p.y_range.start = 0

show(p)
谢谢你能提供的任何帮助

更新:

我现在明白了错误发生的原因,但我仍然不确定如何解决它

以下是我尝试过的:

    p = figure(x_range = 'Date', plot_height = 800, plot_width = 1600, title = "UPS 30 Day Shipment Trend", toolbar_location=None, tools="")

p.line(source=ds, x='Date', y='Count', color="#87CEFA", line_width=8)
这不会产生任何错误,但绘图将为空白

此外,我还尝试:

p = figure(x_range = [1, 2, 3, 4 ....], plot_height = 800, plot_width = 1600, title = "UPS 30 Day Shipment Trend", toolbar_location=None, tools="")

    p.line(source=ds, x='Date', y='Count', color="#87CEFA", line_width=8)
传递“唯一范围”,但这也不起作用,只是给了我一个错误,这是无效的

当我和熊猫一起工作时,我总是用字符串来表示日期,所以我不知道如何处理这个问题

更新:


错误已解决。。我把日期列和计数列混淆了,这就产生了重复的值(:

您使用的是日期字符串作为分类坐标,而不是实际的日期时间值。这很好,但在配置范围时,您需要提供唯一坐标值的列表,按照您希望它们在轴上显示的顺序。查看:

df['Date']

你会发现它包含重复的值。

这有助于理解错误发生的原因,但我仍然不知道如何解决这个问题。你是在问如何在Python中唯一化项目列表吗?你可以在Pandas系列IIRC上使用Python
set
或调用
.unique()
。我肯定这个问题“如何在Python中删除重复项”在这里也得到了多次回答。