Python .csv到pandas dataframe绘制bokeh的烛台图表

时间:2017-05-20 09:34:01

标签: python pandas dataframe bokeh candlestick-chart

需要帮助,因为我很难理解如何将存储在.csv中的数据转换为pandas df,以及如何解析散景数据。

我的.csv文件看起来与此类似

6:22,30,30,31,31
6:38,30,30,32,32
6:53,30,30,31,32
7:05,30,30,32,32
7:39,31,31,33,33

我的所作所为:

df = pd.DataFrame.from_csv('D:\\Job\\GoogleDrive\\Job\\chatwars.csv')

这给了我df美丽的五列数据:

       30  30.1  31  31.1
6:22                     
6:38   30    30  32    32
6:53   30    30  31    32
7:05   30    30  32    32
7:39   31    31  33    33

虽然我不知道为什么第一行的格式是这样的,但我建议我只需要在.csv中添加一些标题(比如'time,low,open,close,high')。

我的问题是:如何正确解析这些数据,这样散景可以为我绘制烛台图表?

我已经从教程中复制了烛台图表的这个代码,但很难读懂它(我只用了一个星期进入Python,请耐心等待我)。除了阅读我的df:

之外,它完全符合我的需要
df["date"] = pd.to_datetime(df["date"])

inc = df.close > df.open
dec = df.open > df.close
w = 12*60*60*1000 # half day in ms

TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=1000, title = "MSFT Candlestick")
p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha=0.3

p.segment(df.date, df.high, df.date, df.low, color="black")
p.vbar(df.date[inc], w, df.open[inc], df.close[inc], fill_color="#D5E1DD", line_color="black")
p.vbar(df.date[dec], w, df.open[dec], df.close[dec], fill_color="#F2583E", line_color="black")

output_file("candlestick.html", title="candlestick.py example")

show(p)  # open a browser

在应用评论中的建议代码后,我发现修改我的.csv更容易:

2017-05-19 06:22:00,30,30,31,31
2017-05-19 06:38:00,30,30,32,32
2017-05-19 06:53:00,30,30,31,32

之后,我在“时间”上更改了“日期”,代码也正常运行!真棒! :d

2 个答案:

答案 0 :(得分:0)

以下内容应解决您的第一个问题。您可以将标题设置为无并指定列名,以便csv中的所有行都将作为数据加载。

df = pd.read_csv('D:\\Job\\GoogleDrive\\Job\\chatwars.csv',header=None,names=['time', 'low', 'open', 'close', 'high'])

答案 1 :(得分:0)

最终代码如下所示:

from math import pi

import pandas as pd

from bokeh.plotting import figure, show, output_file
df = pd.read_csv('D:\\Job\\GoogleDrive\\Job\\chatwars.csv',
                 header=None,names=['time', 'low', 'open', 'close', 'high'])

#print(df.time)

df['time'] = pd.to_datetime(df['time'])

inc = df.close > df.open
dec = df.open > df.close
w = 15*60*1000 # 15 minutes ms

TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

p = figure(x_axis_type="datetime", tools=TOOLS,
           plot_width=1000, title = "MSFT Candlestick")
p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha=0.3

p.segment(df.time, df.high, df.time, df.low, color="black")
p.vbar(df.time[inc], w, df.open[inc], df.close[inc],
       fill_color="#D5E1DD", line_color="black")
p.vbar(df.time[dec], w, df.open[dec], df.close[dec],
       fill_color="#F2583E", line_color="black")

output_file("candlestick.html", title="candlestick.py example")

show(p)  # open a browser