Python .csv 到 pandas 数据框以绘制散景的烛台图
Python .csv to pandas dataframe to draw bokeh's 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 中添加某种 header(例如 '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
在那之后,我在 'time' 上更改了 'date',代码也按预期工作了!惊人的! :D
以下应该可以解决您的第一个问题。您可以将 header 设置为 None 并指定列名,以便 csv 中的所有行都将作为数据加载。
df = pd.read_csv('D:\Job\GoogleDrive\Job\chatwars.csv',header=None,names=['time', 'low', 'open', 'close', 'high'])
最终代码如下所示:
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
需要这方面的帮助,因为我很难理解如何将存储在 .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 中添加某种 header(例如 '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
在那之后,我在 'time' 上更改了 'date',代码也按预期工作了!惊人的! :D
以下应该可以解决您的第一个问题。您可以将 header 设置为 None 并指定列名,以便 csv 中的所有行都将作为数据加载。
df = pd.read_csv('D:\Job\GoogleDrive\Job\chatwars.csv',header=None,names=['time', 'low', 'open', 'close', 'high'])
最终代码如下所示:
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