簡體   English   中英

Python Pandas Bokeh IndexError:列表索引超出范圍-為什么?

[英]Python Pandas Bokeh Indexerror: list index out of range - why?

我在使用以下代碼時遇到麻煩:

from bokeh.plotting import figure, output_file, show, save
from bokeh.models import ColumnDataSource
from bokeh.models import Range1d, LinearAxis
import pandas as pd
from pandas import HDFStore
from bokeh.palettes import Spectral9

store = pd.HDFStore('<hdf store location>')
df = pd.DataFrame(store['d1'])
df = df.rename_axis('Time')
df.fillna(0)

#the number of colums is the number of lines that we will make
numlines = len(df.columns)

#import colour pallet
mypalette = Spectral9[0:numlines]

# remove unwanted columns
col_list = ['Col1', 'Col2', 'Col3']
df = df[col_list]

# make the figure, 
p = figure(x_axis_type="datetime", title="<title>", width = 800, height = 450)
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = '<y axis label>'

p.line(df.index, df['Col1'], legend = 'Col1', color = mypalette[0] )
p.line(df.index, df['Col2'], legend = 'Col2', color = mypalette[1] )

# add extra y axis
p.extra_y_ranges = {'Col3': Range1d(start=0, end=1)}
p.circle(df.index, df['Col3'], legend = 'Col3', color = mypalette[8], 
     y_range_name='Col3' )
p.add_layout(LinearAxis(y_range_name='Col3'), 'right')


# creates an output file 
output_file('<output file location>')

#save the plot
save(p)

這是我的數據框的樣子:

  Time              Col1     Col2     Col3     Col4
29/11/2016 00:00    4        41       41        55
29/11/2016 01:00    55       15       61        81
29/11/2016 02:00    51       75       2         4
29/11/2016 03:00    21       21       51        9
etc.

當我嘗試運行上面的代碼時,出現以下錯誤:

IndexError                                Traceback (most recent call last)
<ipython-input-20-9d2c8911130d> in <module>()
38 
39 # add extra y axis
---> 40 p.circle(df.index, df['Col3'], legend = 'Col3', color = mypalette[8],  y_range_name='Col3')
 41 p.add_layout(LinearAxis(y_range_name='Col3'), 'right')
 42 

IndexError: list index out of range

我似乎無法找出我做錯了什么。 有人可以幫忙嗎?

以下幾行顯示在代碼的頂部。

#the number of colums is the number of lines that we will make
numlines = len(df.columns)

#import colour pallet
mypalette = Spectral9[0:numlines]

在第一行中,設置的行數等於您擁有的列數。 您的數據框中只有4列。 在第二行中,將mypalette設置為等於Spectral9的前N個元素,其中n是行數。 因此,您的調色板僅限於Spectral9的前4個元素。

在稍后的代碼中,您嘗試獲取mypalette的第9個元素(在Python中使用零索引將為[8])。

p.circle(df.index, df['Col3'], legend = 'Col3', color = mypalette[8], 
     y_range_name='Col3' )

您將mypalette限制為只有4個元素,因此mypalette [8]不在范圍內。 如果要使用該特定顏色,可以考慮使用color = Spectral9[8]代替color = mypalette[8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM